python:LEGB識別符號解析順序

avatus發表於2018-09-03
"""
LEGB查詢規則:
L   locals  區域性變數,當前所在名稱空間(如函式,模組等)    注意,包括函式的引數(形參)
E   Enclosing Function  閉包空間(外部巢狀函式的名稱空間)
G   Globals 全域性變數,某個python模組的名稱空間
B   Builtins    python內建模組的名稱空間
"""
key=`Hello`#模組全域性


def test():
    print(key)#全域性,輸出:Hello


def test2(key):
    print(key,end=`***`)#區域性(形參),輸出 key引數傳入的值
    key=key+str(512)
    print(key)

def test3():
    #print(key)
    """ 這裡↑遵循LEGB規則解析識別符號key的時候,
    在函式locals中發現了key=1024
    key不再當作全域性變數解析,所以開啟註釋後這裡會報錯:
    local variable `key` referenced before assignment
    """
    key=1024#注意和前面的test函式比較
    print(key)


def test4():
    global key
    #若要在模組內的某個函式裡面修改模組全域性變數,一定要有global關鍵字
    key=1024



if __name__ == `__main__`:
    test()
    test2(`hi`)
    test3()
    test4()
    test()

執行結果:

Hello
hi***hi512
1024
1024

Process finished with exit code 0

這個問題使用pycharm程式設計時候,編輯器是可以用高亮給你提示出來的……So,有個好的IDE真實省心省力啊O(∩_∩)O


相關文章