Python中變數的作用域

2021-10-07 22:35:15 字數 1795 閱讀 6874

3 變數名解析legb法則

4 關鍵字global

在python程式中,建立,改變,查詢變數名的時候,都是在乙個儲存變數名的空間中進行,我們稱之為命名空間,也被稱之為作用域.

簡單來說,變數的作用域就是指變數可以使用的範圍

程式的變數並不是在任意的位置都可以訪問,訪問許可權取決於這個變數是在**賦值的( 即在程式中定義的變數並不是在任何地方都可以直接引用的,它的使用範圍取決於它被定義的位置.)

2.1 l(local) 區域性作用域

區域性變數:包含在def關鍵字定義的語句塊中,即在函式中定義變數,每當函式被呼叫的時候都會建立乙個新的區域性作用域.

使用範圍:當前函式體

注意:如果需要在函式內部對全域性變數賦值,需要在函式內部通過global語句宣告該變數為全域性變數

2.2 e(enclosing) 巢狀作用域

又稱函式作用域,存在函式的巢狀,在閉包函式外的函式中

使用範圍:當前函式以及被函式的函式體

2.3 g(global) 全域性作用域

在模組層次中定義的變數,每個模組都是乙個全域性作用域

(每個.py檔案都是乙個全域性作用域,定義在函式體外面的.當前整個py檔案)

在全域性作用域定義的變數我們稱之為全域性變數

注意:全域性作用域的作用範圍僅限單個模組檔案內

2.4 b(built-in)內建作用域

系統內部固定模組定義的變數,比如預定義在builtin模組內部.

在內建作用域定義的變數我們稱之為內建變數.

系統內部自己定義的變數,能作用於所有的.py檔案.

#檢視所有的內建變數

print

(vars()

)

搜尋變數名的優先順序:區域性變數》巢狀作用域》全域性作用域》內建作用域

legb法則:

當在函式中使用未確定的變數名時,python會按照優先順序依次搜尋4個作用域,依此來確定變數名的意義.

首先搜尋區域性作用域(l),之後是上一層巢狀結構中的def或者是lambda函式的巢狀作用域(e),之後是全域性作用域(g),最後是內建作用域(b).

按照這個查詢原則,在第一處找到的地方停止,如果是都沒找到,則會發生nameerror錯誤

def

func()

: var =

300print

("var"

,var)

var =

100func(

)print

("var"

, var)

#結果300

100

#宣告全域性變數

global var

var =

200def

func()

:# var = 200

print

("var_"

, var)

deffun()

: var =

100print

("var"

, var)

fun(

)func(

)

注意:python中只有模組(module),類(class)以及函式(def,lambda)才會引入新的作用域,其他的**塊,比如if/else, try/except,for/while 等是不會引入新的作用域的,也就是說這些語句內定義的變數,在外部也可以使用.

if1:

num =

10print

(num)

python中變數作用域

塊級作用域 if true a 10 變數沒有塊級作用域 print a 區域性作用域 只能在某一時刻才能使用 全域性作用域 num 20 def show 全域性變數在函式內部使用時,不能更改,num 10是你自己定義的變數 num 10 print num show print num 若更改需...

Python中變數作用域

在def中定義的變數都是區域性變數 def foo a 200print a def fooo a a 300print a fooo foo 執行得到 unboundlocalerror local variable a referenced before assignment也就是說在函式foo...

python中變數的作用域

變數的作用域 變數起作用的 範圍稱為變數的作用域,與變數定義的位置密切相關,按照作用域的不同,變數可分為區域性變數和全域性變數。1.區域性變數 在函式內部定義的普通變數只在函式內部起作用,稱為區域性變數。當函式執行結束後,區域性變數自動刪除,不可以再使用,如例所示。執行結果如圖所示。2.全域性變數 ...