局部作用域里的代码可以读外部作用域(包括全局作用域)里的变量,我写了两段代码如下:
第一段:
def b(): g=0 def a(): print(g) return a b()()
第二段:
class a(): i=10 def fun(self): print(self.i) #print(i)就会报错NameError: global name 'i' is not defined wa=a() wa.fun()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Python里的name查找是满足LEGB规则的(local=>enclosed=>global=>build-in),所以第一段代码完全OK;
但第二段就涉及到class的命名空间问题了,learningpython里是这么说的:
•Unqualifiednames(e.g.,X)dealwithscopes.
•Qualifiedattributenames(e.g.,object.X)useobjectnamespaces.
总之,如果直接printi的话,就会按照LEGB准则来查找,而这里的i是在a的一个属性,在fun的作用域中是找不到的,所以就出错啦~~~
谢谢~明白了~def里加个globali试试
http://blog.sina.com.cn/s/blog_76e94d210100vxur.html
不行的,i是在class作用域里的,也不是global的,除非两个i都加global,但这就不是我要说的意思了~python的语法是这样的,引用对象的属性一定要用self.i,直接i就是全局或函数的局部变量恩~谢谢~~第二个例子里,i是一个类变量
应该好好看看python的面向对象。