Python 變數的作用域

2022-07-03 10:33:11 字數 874 閱讀 7281

1. 在程式語言中,變數都有一定的作用域,用來限定其生命週期,且不同型別的變數作用域不同。

在python中直譯器引用變數的順序(優先順序)為:當前作用域區域性變數->外層作用域變數->當前模組中的全域性變數->python內建變數

2. 在區域性作用域中引用外部變數時(即比當前區域性作用域塊更大時),如果需要修改區域性作用域以外的變數,需要顯式宣告為global變數。

在python3中引入了nonlocal關鍵字,用來區分全域性變數和非區域性變數,即有: global > nonlocal > local

1) global關鍵字用來在函式或其他區域性作用域中使用全域性變數。但是如果不修改全域性變數也可以不使用global關鍵字;

2) nonlocal關鍵字用來在函式或其他作用域中使用外層(非全域性)變數。

3. 在python2中要實現nonlocal的功能,參考:

4. 函式定義了本地作用域,而模組定義的是全域性作用域。如果想要在函式內定義全域性作用域,需要加上global修飾符。

5. 變數名解析:legb原則

當在函式中使用未認證的變數名時,python搜尋4個作用域:

並且在第一處能夠找到這個變數名的地方停下來。如果變數名在整個的搜尋過程中都沒有找到,python就會報錯。

補充說明:

上面的變數規則只適用於簡單物件,當出現引用物件的屬性時,則有另一套搜尋規則:屬性引用搜尋乙個或多個物件,

而不是作用域,並且有可能涉及到所謂的"繼承"。

6. python中在模組層面定義的變數(無需global修飾),如果在函式中沒有再定義同名變數,可以在函式中當做全域性變數使用。

【參考資料】

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 的規則查詢,即 在區域性找不到,便會去區域性外的區域性找 例如閉包 再找不到就會去全...