繁体   English   中英

命名空间-作用域python

[英]Namespace - scope python

我对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')

我正在用3.4.2跟踪结果

a is local variable
called my len() function: 
14
6
a is global

对于解释,其实你有几乎所有重要的细节,但关键的一点是nonlocal语句导致的标识来指代之前绑定变量在最近的封闭范围,这意味着ainner()是指,影响a = 'local'所以之后 print('a is', a)使用a作为local variable ,长度为14。但是在全局范围内, a = 'global'仍然有效。

您能否分享您的环境细节,以便我们调查差异?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM