1. 程式人生 > >python-eval函式

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