我不明白为什么输出是这样的,而不是1,3,1。
x = 1
def f():
global x
y = x
x = 2
return x + y
print x
print f()
print x
##output:
##
##1
##3
##2
好吧,我明白函数“内部”,global x
告诉函数查看函数外部的x(x = 1)。然后我们将这个x = 1放入y;因此,y = 1。现在,local x
为2,因此x + y = 2 + 1 = 3。
那么为什么最后print x
会产生2?为什么以及如何让舆论“选择”返回本地/全球x?这两个命令都在函数statemante之外..
谢谢!
答案 0 :(得分:5)
no local x
; global
语句在函数全局中使用变量。
因此,x = 2
会改变全局x
。
Python编译器需要事先知道函数中的名称是本地名称还是全局名称。默认情况下,将名称视为全局,除非绑定到名称(赋值是名称绑定的一种形式),此时所有在函数中使用变量变得本地化。您可以使用global
语句覆盖此行为,该语句会将名称的所有使用修复为全局,即使名称已绑定。
请参阅Python参考文档中的Naming and binding section:
如果名称绑定在块中,则它是该块的局部变量。
和global
statement documentation:
global
语句是一个声明,它包含整个当前代码块。这意味着列出的标识符将被解释为全局变量。
您无法在单个范围内将名称视为全局和本地名称。请改用其他名称,就像使用y
一样。
答案 1 :(得分:1)
global
关键字对整个块(对于函数体)有效,因此基本上没有本地x
。
https://docs.python.org/2/reference/simple_stmts.html#grammar-token-global_stmt