INJ*_*E16 5 python global python-3.x
在我的程序中,我只想在某些情况下使用变量global.说它看起来像这样:
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))
Run Code Online (Sandbox Code Playgroud)
我期待结果是:
0
inside the function 1
outside the function 0
Run Code Online (Sandbox Code Playgroud)
然而事实证明是:
0
inside the function 1
outside the function 1
Run Code Online (Sandbox Code Playgroud)
所以,我在想,"好吧,也许Python编译器只要看到'global'关键字,无论它位于何处,都会使变量成为全局变量".这是Python如何与全局变量一起使用的吗?我误会了吗?
是的,你正确地理解了事情.
该global语句不是在运行时评估的内容.它实际上是解析器的一个指令,它实质上告诉它将所有列出的标识符(此处)视为引用全局范围.从对文档的声明:aglobal
全局语句是一个声明,它适用于整个当前代码块.这意味着列出的标识符将被解释为全局变量.
然后它继续说明如何global真正的指令:
程序员注意:
global是解析器的指令.
有条件地使用它没有任何区别:它的存在已经在解析阶段被检测到,因此,为获取名称而生成的字节码已经被设置为在全局范围内查找(with LOAD/STORE GLOBAL).
这就是为什么,如果你dis.dis是一个包含global语句的函数,你将看不到任何相关的字节码global.使用愚蠢的功能:
from dis import dis
def foo():
"I'm silly"
global a
dis(foo)
2 0 LOAD_CONST 0 (None)
2 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
没有生成,global a因为它提供的信息已被使用!
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |