· exec()函数
python中exec()函数可以将字符串当作代码执行,示例如下:
>>> exec("print('asdf')")
asdf
1. 可用于自动创建变量
>>>for i in range(1,10):
exec("value_"+str(i)+'='+str(i)+"**2")
#for循环迭代,给变量value_1至value_10赋值
>>>print(value_5)
25
>>>print(value_3*value_6)
324
>>>for i in range(1,10):
exec('a=value_'+str(i))
print(a,end=" ")
1 4 9 16 25 36 49 64 81
2.可执行文件中的代码
#如将代码存储在11.txt文件中,则可用exec()函数调用执行,示例如下
with open('E://11.txt','r') as f:
n=f.read()
exec(n)
3.exec函数的另外两个参数
exec函数原型如下:
exec(source, [globals, [locals]])
>>>from math import sqrt
scope={}
exec('sqrt=10',scope)
>>>print(sqrt(4))
2.0
>>>print(scope['sqrt'])
1
>>>exec('print(sqrt+5)',scope)
15
如上例所示,exec函数将sqrt作为一个变量赋值了,因此在后面代码中将会无法使用sqrt函数,这是因为exec(‘sqrt=10’)是在全局作用域下执行代码,与命名空间发生冲突。
解决方法:为exec函数指定第2个参数值(必须是一个字典对象),用来表示放置exec函数执行的python代码的作用域(一个字典)。如上例为exec函数指定了第2个参数scope(一个字典类型的变量),这时变量名sqrt实际上属于scope,而不是全局的,所以与sqrt函数并没有冲突。
当要为exec函数要指定的python代码传递参数值时,可用exec函数的第3个参数(第3个参数可以是任何映射对象)。示例如下:
>>>a=5
>>>scope={}
>>>args={'a':20,'b':30}
>>>exec('print(a+b)',scope,args)
50
· eval()函数
eval函数的作用和参数用法均与exec函数类似,区别是eval是用于执行表达式的,并返回结果值,而exec函数并不会返回任何值,只是执行代码。
>>>print(exec('1+2'))
None
>>>print(eval('1+2'))
3