为什么我的函数不能访问封闭函数中的变量?

时间:2010-06-01 09:22:21

标签: python scope

我知道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决议令更多的内容吗?

1 个答案:

答案 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()

...否则你的函数不知道在哪里看(它确实如此,但它会查看全局变量,这就是你得到错误的原因)(如果可以的话,将它作为参数传递不要将函数定义为嵌套函数)