python exec函数_Python 2和Python 3中exec函数的行为

以下代码在Python2和中给出了不同的输出Python3:

from sys import version

print(version)

def execute(a, st):

b = 42

exec("b = {}\nprint('b:', b)".format(st))

print(b)

a = 1.

execute(a, "1.E6*a")

Python2 印刷品:

2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

('b:', 1000000.0)

1000000.0

Python3 印刷品:

3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)]

b: 1000000.0

42

为什么不Python2将函数b内部的变量绑定到execute函数字符串中的exec值,而Python3却不这样做呢?如何实现Python2in 的行为Python3?我已经尝试过通过字典让全局变量和本地变量在中exec起作用Python3,但到目前为止没有任何效果。

-编辑-

在阅读Martijns的答案之后,我用进行了进一步分析Python3。在下面的例子中,我给了locals()百科作为d到exec,但d['b']打印的东西不仅仅是打印别的b。

from sys import version

print(version)

def execute(a, st):

b = 42

d = locals()

exec("b = {}\nprint('b:', b)".format(st), globals(), d)

print(b) # This prints 42

print(d['b']) # This prints 1000000.0

print(id(d) == id(locals())) # This prints True

a = 1.

execute(a, "1.E6*a")

3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)]

b: 1000000.0

42

1000000.0

True

id的比较d和locals()显示,它们是相同的对象。但在这些条件下b应与相同d['b']。我的例子有什么问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值