Python 3.x 试图理解python作用域和全局关键字的行为
输出:Python 3.x 试图理解python作用域和全局关键字的行为,python-3.x,scope,Python 3.x,Scope,输出: def func(): def nested(): global x x = 1 x = 3 nested() print("func:", x) x = 2 func() print("main:", x) 我是编程新手。我想知道我错在哪里。由于我是stack exchange新手,请告知我的问题是否存在任何问题或如何改进 我阅读此代码的方式是: x被指定为整数2 调用func()函数 x被指定为整数3 调用n
def func():
def nested():
global x
x = 1
x = 3
nested()
print("func:", x)
x = 2
func()
print("main:", x)
我是编程新手。我想知道我错在哪里。由于我是stack exchange新手,请告知我的问题是否存在任何问题或如何改进
我阅读此代码的方式是:
我不清楚为什么第一个print命令的输出是3 这个问题问得很好。原因是
全局x
是在嵌套的。不在整个程序中,因此它们是两个不同的变量。简而言之,这里引用了两个不同的标识符,x
:一个在模型级别,另一个在func
本地
您的步骤应为:
x
与值2相关联func
函数func
本地的完全不同的标识符x
与值3关联函数
nested
的这个范围内,x
指的是顶层(模块级)x
。注global
并不意味着“下一个级别”,它意味着“最高/全局级别”-受步骤1影响的同一级别,而不是受步骤3影响的级别x
与值1关联一般提示:每次你认为你需要使用
global
时,你几乎肯定不需要。我认为你缺少的是x可以是两个独立的变量,一个局部变量和一个全局变量,尽管名称相同。您可能还想提及非本地
,因为如果在嵌套
6中使用,可能会产生不同的结果,这可能得益于以下澄清,即在REPL/module/whatnot中,x
与全局
x相同。也许从它们是两个不同的东西(如果名称相同)开始。(将假设的步骤转化为实际发生的事情,就像你一样,我认为这是一个很好的方法,不要吹毛求疵)谢谢!你的回答让我很清楚我错在哪里。实际上,我刚刚下载了一张由某人制作的anki牌,这是我弄不懂的其中一张牌。
func: 3
main: 1