Python中變量的作用域

一、變量作用域的含義

變量的作用域說白了就是變量的值從哪裡獲取,或者說變量取值的地方

我們在寫代碼過程中會用到很多變量,這些變量會出現在各種代碼塊中,有的出現在函數塊裡,有的在函數塊外,例如:

def n2(): a = 1 b = 2 def n1(): b = 3 print(b) print(a) n1()n2()結果:31

在這個例子中,對於變量a,b的值,是應該先識別函數中的還是先識別函數外的呢,其實python內部在識別變量的值得時候是有順序的,不是胡亂讀取的,python內部對於獲取變量的值是規定了一個順序的。

二、變量定義域順序

LEGB原則

當你在代碼裡聲明一個變量後,python會在LEGB四個作用域裡搜索變量的值,它的搜索是有順序的,第一步現在L也就是當前最裡層局部作用域內找,如果沒找到,第二步會跑到包含當前層的上一層作用域E裡找,還沒找到的話,第三部會去模塊級的裡面G裡找,最後是去python裡的固定模塊裡找。

Python中變量的作用域

三、在不同作用域修改變量的值

問題1.,既然對於變量的值的搜索有順序,如果當前在全局裡已經有變量a的值,我在局部域裡想修改a的值,怎麼修改呢?

問題2. 如果變量是在上一層的函數里有值,我想在當前層函數內修改,又如何操作呢?

問題1的解答:對於這種情況需要用到global,在重新給變量a賦值時,要先聲明變量global a,

a = 1def n(): global a print(a) a = 123 print(a)n()結果:1123 問題2的解答:對於這種情況需要用到nonlocal,在重新給變量a賦值時,要先聲明變量nonlocal a

def n1(): a = 1 def n2(): nonlocal a a = 2 print(a) n2() print(a)n1()結果:22四、哪些情況適用變量的作用域對於模塊,類,函數里出現的變量就要注意了,它們會引入新的作用域,在這裡如果內部


分享到:


相關文章: