python-eval函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/longgb123/article/details/82823454

一、基本用法

eval(expression, globals=None, locals=None) 

eval 最直接的作用就是把字符串当成有效的表达式来求值并返回计算结果。
如下:

a = 1
b = 2
print("eval('a+b') : ", eval('a+b'))

>>> eval('a+b') : 3

python包括全局变量globals和局部变量locals。可以直接打印出来。

print(globals())
print(locals())

二、使用 dict

eval 后面的参数是放字符串的全局变量和局部变量的表达式。

a = 1
b = 2
def local_var():
    a = 3
    b = 4
    print("eval('a+b') : ", eval('a+b'))
    print("eval('a+b', globals()) : ", eval('a+b', globals()))
    print("eval('a+b', globals(), locals()) : ", eval('a+b', globals(), locals()))
    print("eval('a+b', {'a': 8, 'b': 9}) : ", eval('a+b', {'a': 8, 'b': 9}))
    print("eval('a+b', {'a': 8, 'b': 9}, {'c': 1, 'b': 2}) : ", eval('a+b', {'a': 8, 'b': 9}, {'c': 1, 'b': 2}))
local_var()

>>> eval('a+b') : 7
>>> eval('a+b', globals()) : 3
>>> eval('a+b', globals(), locals()) : 7
>>> eval('a+b', {'a': 8, 'b': 9}) : 17
>>> eval('a+b', {'a': 8, 'b': 9}, {'c': 1, 'b': 2}) : 10

看上面的代码可以理解 eval 后面2个参数的作用。相当于给表达式添加临时的作用域,并不会污染真正的globals(), locals()变量的值,仅仅通过字典即可完成作用域的传递。

也可以用于生成一个函数:

func = eval('lambda x: 1.0 / (1 + c*((x - k) / f))', dict({'k': 1, 'f': 2.0}, c=3))
func(2)

>>> 0.4

猜你喜欢

转载自blog.csdn.net/longgb123/article/details/82823454