Python變數查詢LEGB原則

2021-08-18 09:16:17 字數 960 閱讀 3557

首先要知道python的基本資料型別分為2種,可變以及不可變型別。

可變型別list dict set

不可變型別number tuple string

當python訪問變數值時,預設legb查詢原則,如果都找不到,則會丟擲nameerror

但是,作為對變數值進行修改,則會有兩種情況:

a=10

defb

(): print(a) #10

b()print(a) #10

可以正常訪問,根據legb原則找到全域性變數

a=10

defb

(): a = 20

print(a) #20

b()print(a) #10

相當於在函式內部建立了副本,修改只作用於區域性。

a=10

defb

(): print(a) #10

a = 20

#unboundlocalerror: local variable 'a' referenced before assignment

b()

直接報錯,本地變數在申請之前訪問,解決辦法,使用global關鍵字宣告。

a=10

defb

():global a

a = 20

b()print(a) #20

使用global宣告為全域性變數,將修改作用在了全域性上。

可變變數不存在上述問題,可以直接訪問。

a=

defb

(): print(a) #

print(a) #[1]

b()print(a) #[1]

python 變數作用域 LEGB

l local 區域性作用域 區域性變數 包含在def關鍵字定義的語句塊中,即在函式中定義的變數。每當函式被呼叫時都會建立乙個新的區域性作用域。e enclosing 巢狀作用域或稱為閉包作用域 e也包含在def關鍵字中,e和l是相對的,e相對於更上層的函式而言也是l。與l的區別在於,對乙個函式而言...

Python變數作用域LEGB和變數名的查詢規則

作用域 變數起作用的範圍。legb含 釋 l local function 區域性作用域 函式內的命名空間 可以通過locals 檢視。e enclosing function locals外部巢狀作用域 外部巢狀函式的命名空間 例如closure閉包函式 g global module 全域性作用...

Python 17 變數作用域LEGB(作用域鏈)

python中的 legb 作用域鏈 l 區域性變數 local e 外層函式 閉包空間 enclosing function g 全域性變數 global b 內建模組 builtins 當找乙個變數時,現在 local 找,即先找本函式內的變數,若找到則結束 否則,找閉包空間,即外層函式,從內向...