python-eval函数

一、基本用法

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值