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的原因是什么?
答案 0 :(得分:4)
简而言之,这里引用了两个不同的标识符x
:一个在模型级别,另一个在func
本地。
您的步骤应为:
x
(即模块级别)与值2相关联。func
函数。x
本地的完全不同的标识符func
与值3相关联。nested
函数。nested
的此范围内,x
指的是顶级(模块级别)x
。注意global
并不意味着“下一级”,它表示“顶级/全局级别” - 受步骤1影响的同一级别,而不是受步骤3影响的级别。x
与值1相关联。等。
一般提示:每当您认为需要使用global
时,您几乎肯定不会。
答案 1 :(得分:0)
问的问题非常好。原因是因为global x
是在嵌套中声明的。不是整个程序,所以他们有两个不同的变量。