繁体   English   中英

试图了解python范围和全局关键字的行为

[英]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

我是编程新手。 我想知道我哪里出错了。 由于我是堆叠交换的新手,如果我的问题或如何改进它,请告诉我。

我读这段代码的方式是:

  1. x被赋予整数2。
  2. 调用func()函数。
  3. x被赋予整数3。
  4. 调用nested()函数。
  5. x被声明为全局变量? #并不清楚其含义
  6. x被赋予整数1。
  7. print(“func”:x)#because x在嵌套()中成为一个全局变量我希望输出为1。
  8. print(“main”:x)#I相信这是因为x是一个全局变量?

我不清楚为什么在第一个打印命令中输出为3?

简而言之,这里引用了两个不同的标识符x :一个在模型级别,另一个在本地到func

您的步骤应为:

  1. 顶层(即模块级)的标识符x与值2相关联。
  2. func函数。
  3. func本地的完全不同的标识符x与值3相关联。
  4. 调用nested函数。
  5. Python被告知,在这个nested范围内, x指的是顶层(模块级) x 注意global并不意味着“下一级”,它意味着“顶级/全局级别” - 受步骤1影响的同一个,而不是受步骤3影响的那个。
  6. 全局(顶级) x与值1相关联。

等等

一般提示:每当你认为你需要使用global你几乎肯定不会。

问的问题很好。 原因是因为global x是在嵌套中声明的。 不在整个程序中,所以它们是两个不同的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM