python基础之eval函数与exec函数

函数exec与eval都可以将字符串作为代码执行
(1)eval(expression[, globals[, locals]])
expression实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映射对象。
代码示例1:

a = eval("1+2")
print(a)
#3
b = eval("x+y",{"x":1,"y":2})
print(b)
#3
c = eval("sqrt(4)")
print(c)
#2.0
d = '{"x":1,"y":2}'
print(eval(d))
#{"x":1,"y":2}

可以看出用eval会执行表达式,并返回一个结果
(2)exec(object[, globals[, locals]])
这个函数支持动态执行 Python 代码。object 必须是字符串或者代码对象。如果是字符串,其会解析为python语句执行,如果是一个对象,将会被直接执行
代码示例2:

a = exec("1+2")
print(a)
#None
exec("x = 1 + 2")
print(x)
#3

exec不会返回任何值,只会执行其中的语句
但在执行exec时,可能会造成命名空间的冲突,此时就需要将其传递一个命名空间。
代码示例3:

exec("str = 1")
print(str([1,2,3]))

此时将会报错
TypeError: ‘int’ object is not callable
下面是修改代码,用字典作为代码块的命名空间

scope = {}
exec("str = 1",scope)
print(str([1,2,3]))
#[1,2,3]
print(scope["str"])
#1
print(scope.keys())
#dict_keys(['__builtins__', 'str'])

这样代码就不会污染原有的命名空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值