Python函数-eval()

eval(source[, globals[, locals]])

作用:

将字符串str当成有效的表达式来求值并返回计算结果。参数:source:一个Python表达式或函数compile()返回的代码对象;globals:可选。必须是dictionary;locals:可选。任意map对象。

实例:

 1 #################################################
 2 字符串转换成列表
 3 >>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
 4 >>>type(a)
 5 <type ‘str‘>
 6 >>> b = eval(a)
 7 >>> print b
 8 [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
 9 >>> type(b)
10 <type ‘list‘>
11 #################################################
12 字符串转换成字典
13 >>> a = "{1: ‘a‘, 2: ‘b‘}"
14 >>> type(a)
15 <type ‘str‘>
16 >>> b = eval(a)
17 >>> print b
18 {1: ‘a‘, 2: ‘b‘}
19 >>> type(b)
20 <type ‘dict‘>
21 #################################################
22 字符串转换成元组
23 >>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
24 >>> type(a)
25 <type ‘str‘>
26 >>> b = eval(a)
27 >>> print b
28 ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
29 >>> type(b)
30 <type ‘tuple‘>
 1 #test eval() and locals()
 2 x = 1
 3 y = 1
 4 num1 = eval("x+y")
 5 print (num1)
 6
 7 def g():
 8     x = 2
 9     y = 2
10     num3 = eval("x+y")
11     print (num3)
12     num2 = eval("x+y",globals())
13     #num2 = eval("x+y",globals(),locals())
14     print (num2)
15
16 g()
17
18 print locals()["x"]
19 print locals()["y"]
20 print globals()["x"]
21 print globals()["y"]

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4

eval()使用原因:

1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。

2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

注:

eval有安全性问题,比如用户恶意输入就会获得当前目录文件

1 eval("__import__(‘os‘).system(‘dir‘)")
1 >>> import os
2 >>> ‘os‘ in globals()
3 True
4 >>> os.system(‘whoami‘)
5 ap\zhail

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval

时间: 2024-09-29 03:46:34

Python函数-eval()的相关文章

python内置函数 eval()、exec()以及complie()函数

1.eval函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值. eval(expression[, globals[, locals]]) 参数 expression -- 表达式. globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象. locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象. 返回值 返回表达式计算结果. 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式(注意eval不支持任何形式的赋值

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

Python函数信息

Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pass 2 3 >>> a=yes 4 >>> a.func_name 5 'yes' 6 >>> 2.获取函数的flags[后面有用,先说这个] [python docs]:The following flag bits are defined for c

Python 函数对象、生成器 、装饰器、迭代器、闭包函数

一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数作为第一类对象有如下特性: #函数身为一个对象,拥有对象模型的三个通用属性:id(内存地址

【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

python 函数名 、闭包 装饰器 day13

1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print(func1) # <function func1 at 0x0000027B7CF1A048> 2,函数名的赋值 def func(): print(666) f = func print(f()) 3,函数名可以作为容器类数据的元素. def f1(): print(111) def f2()

内置函数—eval、exec、compile

内置函数----eval.exec.compile eval()将字符串类型的代码执行并返回结果.print(eval('1+2+3+4'))输出:10 exec() 将字符串类型的代码执行.print(exec("1+2+3+4"))exec("print('hello,world')")指定global参数code = '''import os print(os.path.abspath('.'))'''code = '''print(123)a = 20pri

[Python]函数与函数编程

1. 函数 使用def语句可定义函数: def add(x, y): return x + y 函数体就是在调用函数时所执行的一系列语句.调用函数的方法是在函数名称后面加上参数.参数的顺序必须与函数定义匹配,否则会引发TypeError异常.可以为函数的参数设置默认值,例如: def split(line, delimiter=','): statements 如果给最后一个参数名加上星号"*",函数就可以接受任意数量的参数: def fprintf(file, fmt, *args)

Python函数分类及操作

为什么使用函数? 答:函数的返回值可以确切知道整个函数执行的结果 函数的定义:1.数学意义的函数:两个变量:自变量x和因变量y,二者的关系 2.Python中函数的定义:函数是逻辑结构化过程化得编程方法 定义面向过程:过程 def ( 在Python中,过程是没有返回值的函数) 1 #定义函数 2 def func1(): 3 """testing""" 4 print('in the func1') 5 return 0 6 7 #定义过程 8