首先要知道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 找,即先找本函式內的變數,若找到則結束 否則,找閉包空間,即外層函式,從內向...