【Python】exec和eval函数求值字符串

· 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值