Python类内与方法内定义global变量的区别及报错解惑
关于Python中
global关键字的概念解析 1. global的核心作用
global不是用来“定义”全局变量的,它的作用是告诉当前函数/方法:我要使用的这个变量是来自全局命名空间的,不是当前局部作用域的。你不能把global dnew直接写在类的内部(类的顶层作用域),因为类的顶层作用域不属于函数/方法的局部作用域,global在这里是无效的语法,根本不会创建全局变量dnew。
2. 放在mainfn()里能运行的原因
当你在mainfn()里写global dnew时,这个声明是在函数内部,它会:
- 如果全局作用域还没有
dnew,后续对dnew的赋值会创建这个全局变量 - 类的其他方法如果要访问这个全局变量,要么也用
global dnew声明,要么通过globals()['dnew']来访问
3. 类内部用全局变量的正确姿势
如果你想让类的方法都访问同一个全局变量:
- 先在全局作用域(类的外部)定义
dnew(比如dnew = set()) - 在类的方法内部,用
global dnew声明要使用这个全局变量,之后就能正常读写了
4. 错误场景的根源
你把global dnew写在Node类的内部(类的顶层),这行代码不会创建全局变量dnew,因为global只能在函数/方法的局部作用域里生效。当类的方法去访问dnew时,全局命名空间里根本没有这个变量,所以会触发NameError。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

