内容简介:在输出结果:
eval()
函数用来执行一个字符串表达式,并返回表达式的值。
eval(expression[, globals[, locals]])
expression globals locals
>>>x = 7 >>>eval( '3 * x' ) 21 >>>eval('pow(2,2)') 4 >>>n=81 >>>eval("n + 4") 85
默认作用域
在 globals
和 locals
两个参数省略的情况下, eval()
函数在当前的作用域执行:
x = 100 y = 200 def compute(): x = 10 y = 20 print(eval("x + y")) compute()
输出结果:
globals 作用域
Python 的全局名字空间存储在一个叫 globals()
的字典对象中;局部名字空间存储在一个叫 locals()
的字典对象中。我们可以用 print ()
来查看该函数体内的所有变量名和变量值。
x = 100 y = 200 def compute(): x = 10 y = 20 print(globals()) print(locals()) compute()
输出结果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000024AC58C7710>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Code/draw.py', '__cached__': None, 'x': 100, 'y': 200, 'compute': <function compute at 0x0000024AC587C268>} {'x': 10, 'y': 20}
从结果可以看到, globals()
的结果包含了全局变量 'x': 100, 'y': 200
,而 locals()
则包含的是局部变量 'x': 10, 'y': 20
。eval 函数包含 globals
参数则会使用全局作用域下的变量。
x = 100 y = 200 def compute(): x = 10 y = 20 print(eval("x + y", globals())) compute()
输出结果:
locals 作用域
如果同时包含 globals
和 locals
参数,则会优先在本地作用域查找,如果本地作用域没有,才会查找全局作用域。
x = 100 def compute(): y = 20 print(eval("x + y", globals(), locals())) compute()
输出结果:
字符串转换
字符串转换成列表
s = "[[1,2], [3,4], [5,6]]" print(type(s)) lst = eval(s) print(type(lst)) print(lst)
输出结果:
<class 'str'> <class 'list'> [[1, 2], [3, 4], [5, 6]]
字符串转换成字典
s = "{'math': 90, 'chinese': 100}" print(type(s)) dic = eval(s) print(type(dic)) print(dic)
输出结果:
<class 'str'> <class 'dict'> {'math': 90, 'chinese': 100}
字符串转换成元组
s = "([1,2], [3,4], [5,6])" print(type(s)) tup = eval(s) print(type(tup)) print(tup)
输出结果:
<class 'str'> <class 'tuple'> ([1, 2], [3, 4], [5, 6])
需要注意的地方
eval()
函数有安全性问题,比如用户恶意输入就会获得当前目录文件。
eval("__import__('os').system('dir')")
甚至查看目录下的所有文件的内容:
eval(open(‘filename’).read())
怎么避免安全问题?
-
自行写检查函数;
以上所述就是小编给大家介绍的《Python eval 函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
- python基础教程:函数,函数,函数,重要的事说三遍
- C++函数中那些不可以被声明为虚函数的函数
- 017.Python函数匿名函数
- 纯函数:函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
从“为什么”开始
[美] 西蒙·斯涅克 / 苏西 / 海天出版社 / 2011-7 / 32.00元
影响人类的行为:要么靠操纵,要么靠感召。 操纵带来的是交易,是短期效益; 感召带来的是信任,是永续经营! 盖茨走后,微软面临怎样的挑战?后盖茨时代,微软为何从一个希望改变世界的公司沦落为一个做软件的公司? 沃尔玛的灵魂人物过世后,一度被人们热爱的公司,遭到的竟然多是顾客、员工的反感?沃尔玛要怎样做才能重放昔日光彩? 星巴克吸引人们购买的不是咖啡,而是理念?为什么说霍华......一起来看看 《从“为什么”开始》 这本书的介绍吧!