社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

user707650

user707650 最近创建的主题
user707650 最近回复了
12 年前
回复了 user707650 创建的主题 » exec函数未按预期工作(python)[重复]

恐怕我不能准确地解释它,但它基本上是由于函数内部的b是局部的,并且 exec() 似乎要分配给全局b。您必须在函数内声明b为全局, 在exec语句中。

试试这个:

from sys import version

print(version)

def execute1(a, st):
    b = 42
    exec("b = {}\nprint('b:', b)".format(st))
    print(b)

def execute2(a, st):
    global b
    b = 42
    exec("global b; b = {}\nprint('b:', b)".format(st))
    print(b)

a = 1.
execute1(a, "1.E6*a")
print()
execute2(a, "1.E6*a")
print()
b = 42
exec("b = {}\nprint('b:', b)".format('1.E6*a'))
print(b)

这给了我

3.3.0 (default, Oct  5 2012, 11:34:49) 
[GCC 4.4.5]
b: 1000000.0
42

b: 1000000.0
1000000.0

b: 1000000.0
1000000.0

您可以看到,在函数外部,全局b被自动拾取。在函数内部,您正在打印本地b。

注意,我本以为 执行() 始终首先使用全局B,以便 execute2() ,您不需要在 执行() 功能。但我发现这行不通(这是我无法准确解释的部分)。