命名空间 - 范围python

时间:2016-08-07 11:44:25

标签: python scope namespaces closures

我很担心LEGB的规则如何适用于此。一世 了解Local可以在函数或类方法中使用 例。封闭的可以是其封闭功能,例如,如果是功能 被包装在另一个函数中。全球指最上层 执行脚本本身的级别,内置是特殊名称 Python为自己保留。我只是不知道它在这里是如何应用的>为什么输出就是它。谢谢

a = 'global'

def outer():

    def len(in_var):
        print('called my len() function: ')
        l = 0
        for i in in_var:
            l += 1
        return l

    a = 'local'

    def inner():
        global len
        nonlocal a
        a += ' variable'
    inner()
    print('a is', a)
    print(len(a))

outer()

print(len(a))
print('a is', a)

输出

('a is', 'local')
called my len() function: 
5
15
('a is', 'global variable')

1 个答案:

答案 0 :(得分:0)

我正在使用3.4.2

获得以下结果
a is local variable
called my len() function: 
14
6
a is global

为了解释,实际上你得到了几乎所有重要的细节,但关键点是nonlocal语句使标识符引用最近的封闭范围中的先前绑定变量,这意味着a在{ {1}}在此之后引用并影响inner(); a = 'local'使用print('a is', a)作为长度为14.但是在全球范围内local variable仍然有效。

您能否分享一下我们可以调查差异的环境细节?