1.exec()将字符串作为代码运行
exec("print('hello,world')") >>hello,world
exec函数主要用于动态地创建代码字符串。如果这种字符串来自其他地方,就几乎无法确定它将包含什么内容。因此为了安全起见,要提供一个字典以充当命名空间。
命名空间:可以视为一个放置变量的地方,类似于一个看不见的字典。因此,当你执行语句x=1时,将在当前命名空间存储键x和值1。当前命名空间通常是全局命名空间,但也并非必然如此。
from math import sqrt scope={} exec('sqrt=1',scope) sqrt(4) >>2.0 scope['sqrt'] >>1
如此可见,可能带来破坏的代码并非覆盖函数sqrt。sqrt函数该怎样还怎样,而通过exec执行赋值语句创建的变量位于scope中。
2. eval()
eval是一个类似于exec的内置函数。
exec执行一系列Python语句,而eval计算用字符串表示的Python表达式的值,并返回结果。(exec什么都不返回,因为它本身是条语句)
与exec一样,也可以向eval提供一个命名空间。
eval(input("input an expression:")) >input an expression:4+8 >12