我知道LEGB规则。但是,对函数是否具有对封闭函数中定义的变量的读访问权的简单测试似乎并不实际有效。即:
#!/usr/bin/env python2.4
'''Simple test of Python scoping rules'''
def myfunction():
print 'Hope this works: '+myvariable
def enclosing():
myvariable = 'ooh this worked'
myfunction()
if __name__ == '__main__':
enclosing()
返回:
NameError: global name 'myvariable' is not defined
我做错了吗?还有比LEGB决议令更多的内容吗?
答案 0 :(得分:2)
如果你这样做:
#!/usr/bin/env python2.4
'''Simple test of Python scoping rules'''
def enclosing():
myvariable = 'ooh this worked'
def myfunction():
print 'Hope this works: ' + myvariable
myfunction()
if __name__ == '__main__':
enclosing()
...否则你的函数不知道在哪里看(它确实如此,但它会查看全局变量,这就是你得到错误的原因)(如果可以的话,将它作为参数传递不要将函数定义为嵌套函数)