gpt4 book ai didi

python - 这个 python 全局范围魔法背后的逻辑是什么?

转载 作者:太空狗 更新时间:2023-10-30 02:21:23 25 4
gpt4 key购买 nike

我在 python 中弄乱了范围,发现了一些我认为很奇怪的东西:

g = 5

def foo(a):
if a:
global g
g = 10
else:
g = 20


print("global g: ",g)

foo(False)
print("global g: ",g) # 20?! What?

foo(True)
print("global g: ",g)

我认为第二次打印应该是“5”,因为全局语句从未执行过,但很明显,输出是 20(!)。

这背后的逻辑是什么?

最佳答案

global python 编译器 使用关键字将函数作用域中的名称标记为全局。

一旦您在函数中的任何地方使用它,该名称就不再是本地名称。

请注意,if 不会引入新作用域,只有函数和模块会引入新作用域(类、列表、字典和集合理解是函数作用域的特例)。

(难以阅读和非 pythonic)解决方法是使用 globals() 函数:

def foo(a):
if a:
globals()['g'] = 10
else:
g = 20

关于python - 这个 python 全局范围魔法背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com