python 變數的作用域

2021-10-02 10:27:15 字數 2757 閱讀 1504

變數的作用域

1.區域性作用域(local)

每次呼叫函式時都會建立乙個區域性作用域。

區域性作用域(函式)中定義的變數稱之為區域性變數。

區域性變數的作用域為:從定義變數處開始到函式結束。

函式呼叫結束後,其對應的區域性作用域中的所有變數都會被銷毀。

2.巢狀作用域(enclosing)

每次呼叫巢狀函式中的外函式時都會建立乙個巢狀作用域。

當在外函式內定義變數時,該變數的作用域為:從定義變數處開始到函式結束

外函式呼叫結束後,其對應的巢狀作用域中的所有變數都會被銷毀。(閉包除外)

3.全域性作用域(global)

每次執行模組時都會建立乙個全域性作用域。

全域性作用域(模組)中定義的變數稱之為全域性變數

全域性變數的作用域:從定義變數處開始到模組結束

程式執行結束後,全域性作用域中的所有變數都會被銷毀。

4.內建作用域(built-in)

每次啟動python直譯器都會自動載入內建模組,從而建立乙個內建作用域。

內建模組中的函式(內建函式),可以在程式中直接使用。

停止直譯器後,內建作用域中的所有變數都會被銷毀。

print(id(123))              # id是內建作用域

id = "global" # id是全域性作用域

def outside():

id = "enclosing" # id是巢狀作用域

def inside():

id = "local" # id是區域性作用域

print(id) # local

inside()

if __name__ == '__main__':

outside()

情景1

i = 11

def fun1():

i = 22 # 此處不會改變全域性變數i的值

print(i)

if __name__ == '__main__':

fun1() # 22

print(i) # 11

情景2

num = 0

def fun2():

print(num) # unboundlocalerror: local variable 'num' referenced before assignment

num = 5 # 此處重新定義num,並覆蓋了全域性作用域的num,導致上一行**沒有找到num作用域而報錯

if __name__ == '__main__':

fun2()

情景3

# 在預設情況下,在區域性作用域或巢狀作用域中不能修改全域性變數所引用的物件

# (如果引用的物件是可變型別的,可以修改物件的內容)

g = 20 #全域性變數g是不可變型別物件

def f1():

# 重新定義了乙個區域性變數g,把全域性變數g給遮蔽了

g = 19 # 與全域性變數g記憶體位址不一樣

def f2()

# 重新定義了乙個區域性變數g,把全域性變數g給遮蔽了

g += 1 # 與全域性變數g記憶體位址不一樣

情景4

g2 = [3]

def f1():

# 重新定義了乙個區域性變數g2,把全域性變數g給遮蔽了

g2 = [1] # 與全域性變數g2記憶體位址不一樣

def f2():

# 全域性變數g2引用的物件是可變型別的,可以修改物件的內容

g2[0] = 8 # 與全域性變數g2記憶體位址一樣

情景5

「」「

如果想在區域性作用域或巢狀作用域中修改全域性變數所引用的物件,可以在區域性作用域或

巢狀作用域中使用關鍵字global對變數進行宣告,從而表明在區域性作用域或巢狀作用域中不會再

重新定義乙個新的同名變數,而是使用該名稱的全域性變數。

」「」g = 20

def f3():

global g

g = 19 # 與全域性變數g記憶體位址一樣

print(g)

情景6

"""

流程控制語句和異常處理語句不會建立對應的作用域,因此,對於流程控制語句和異常處理語句中

定義的變數,在語句執行結束後仍然是可用的。

"""if true:

temp = 18

print(temp) # 18

# -------------------------------

for item in [1, 2, 3]:

print(item)

print(item) # 3 迴圈結束後item仍然可用

# ------------------------------

try:

result = 5

except:

pass

print(result) # 5

python變數作用域

變數作用域 scope 在python中是乙個容易掉坑的地方。什麼是作用域 作用域簡單說就是乙個變數的命名空間。中變數被賦值的位置,就決定了哪些範圍的物件可以訪問這個變數,這個範圍就是命名空間。python賦值時生成了變數名,當然作用域也包括在內。python的作用域一共有4中,分別是 l loca...

Python 變數作用域

g global defchange global g g g change print g change print g 結果 global globalchange def function g function deflocalvar g local defglobalvar global g...

變數作用域 python

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 以 l e g b 的規則查詢,即 在區域性找不到,便會去區域性外的區域性找 例如閉包 再找不到就會去全...