>>> # 将字符串作为 Python 表达式来执行
>>> eval("1 + 2")
>>> 3
>>> # 也被称为是 repr() 的反函数
>>> eval(repr("I love FishC"))
'I love FishC'
>>> eval(repr([1, 1, 2, 3, 5]))
[1, 1, 2, 3, 5]
>>> # 通过 globals 指定全局命名空间
>>> eval("F + C")
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
eval("F + C")
File "<string>", line 1, in <module>
NameError: name 'F' is not defined
>>> eval("F + C", {'F':70, 'C':67})
137
>>> # 如果同时指定 globals 和 locals,则后者的优先级更高
>>> eval("F + C", {'F':70, 'C':67}, {'F':'f', 'C':'c'})
'fc'
>>> # 默认 __builtins__ 内置命名空间将被导入到 globals 中,除非将其设置为 None
>>> eval("sum([1, 2, 3])")
6
>>> eval("sum([1, 2, 3])", {'__builtins__':None})
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
eval("sum([1, 2, 3])", {'__builtins__':None})
File "<string>", line 1, in <module>
TypeError: 'NoneType' object is not subscriptable
>>> # 还可以 “狸猫换太子”,但这种做法不可取
>>> eval("sum([1, 2, 3])", {'sum':print})
[1, 2, 3]