簡體   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