python_eval函数_2021-06-07
程序员文章站
2022-04-27 18:44:43
...
描述
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
语法
以下是 eval() 方法的语法:
eval(expression[, globals[, locals]])
参数
expression – 表达式。
globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
返回值
返回表达式计算结果。
在全局中寻找执行
a=10;
print(eval("a+1")) 11
在g的优先作用域下执行
a=10;
g={'a':4}
print(eval("a+1",g)) 5
a=10
b=20
c=30
g={'a':6,'b':8}
t={'b':100,'c':10}
print(eval('a+b+c',g,t)) 116
print(eval('a+b+c',t,g)) 24 越在后面优先级越高,相当于b先被赋值为100,再被赋值为8
eval的本质可以说是去引号
>>> s="abck"
>>> print(eval(s))
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print(eval(s))
File "<string>", line 1, in <module>
NameError: name 'abck' is not defined\
这个之所以报错的原因是首先去引号得到了abck,所以会去看他是不是已经定义的变量,发现不是,就报错了
>>> s="abck"
>>> print(eval('s'))
abck
去掉引号,里面本身是个字符串就进行运算得到
>>> s='"sas"'
>>> print(eval(s))
sas
>>> a=10
>>> b=20
>>> c=30
>>> s='[a,b,c]'
>>> print(eval(s)) 变量abc
[10, 20, 30] 哈哈哈看到没去引号
>>> s='["a","b","c"]'
>>> print(eval(s))
['a', 'b', 'c'] 字符串abc
上一篇: divmod函数2021.6.5