python-eval函式
阿新 • • 發佈:2018-12-11
一、基本用法
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