[英]Trying to understand behavior of python scope and global keyword
def func():
def nested():
global x
x = 1
x = 3
nested()
print("func:", x)
x = 2
func()
print("main:", x)
输出:
func: 3
main: 1
我是编程新手。 我想知道我哪里出错了。 由于我是堆叠交换的新手,如果我的问题或如何改进它,请告诉我。
我读这段代码的方式是:
我不清楚为什么在第一个打印命令中输出为3?
简而言之,这里引用了两个不同的标识符x
:一个在模型级别,另一个在本地到func
。
您的步骤应为:
x
与值2相关联。 func
函数。 func
本地的完全不同的标识符x
与值3相关联。 nested
函数。 nested
范围内, x
指的是顶层(模块级) x
。 注意global
并不意味着“下一级”,它意味着“顶级/全局级别” - 受步骤1影响的同一个,而不是受步骤3影响的那个。 x
与值1相关联。 等等
一般提示:每当你认为你需要使用global
你几乎肯定不会。
问的问题很好。 原因是因为global x
是在嵌套中声明的。 不在整个程序中,所以它们是两个不同的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.