在我的程序中,我只在某些情况下需要一个全局变量。假设它看起来像这样:
a = 0
def aa(p):
if p:
global a
a = 1
print("inside the function " + str(a))
print(a)
aa(False)
print("outside the function " + str(a))
我希望结果是:
0
inside the function 1
outside the function 0
然而事实证明:
0
inside the function 1
outside the function 1
所以,我在想,“好吧,也许Python编译器会在看到'global'关键字时使变量成为全局变量,不管它位于何处”。这就是Python处理全局变量的方式吗?我误解了吗?你知道吗
是的,你对事情的理解是正确的。你知道吗
global
语句不是在运行时计算的。它实际上是解析器的指令,它本质上告诉解析器将所有列出的标识符(a
这里)视为引用全局范围。从the ^{然后继续说明
global
是如何真正成为指令的:有条件地使用它没有任何区别:在解析阶段已经检测到它的存在,因此,为获取名称而生成的字节码已经被设置为在全局范围内查找(使用
LOAD/STORE GLOBAL
)。你知道吗这就是为什么,如果您
dis.dis
一个包含global
语句的函数,您将看不到global
的任何相关字节码。使用愚蠢的函数:没有为
global a
生成任何内容,因为它提供的信息已被使用!你知道吗相关问题 更多 >
编程相关推荐