變數的作用域指的是變數能夠有效的區域,因為我們在使用函數的時候,有的變數是在主程式中定義的,有的是在呼叫的函數中定義的,當我們的主程式使用函數中定義的變數時,就會出現異常。下面來介紹一下局部變數和全域變數。
局部變量,顧名思義,就是作用在局部區域的變量,如果是在函數中定義的變量,那麼就只在函數中起作用,如果在函數外部使用函數內部的變量,就會出現異常。
看下面的例子:
deftest():data='局部變數'print('在函數內部輸出data為:',data)test()print('在主程式中輸出data:',data)
輸出結果為:
在函數內部輸出data為:局部變數Traceback(mostrecentcalllast):FileC:/Users/輕煙/PycharmProjects/untitled/venv/Include/ts.py,line6,in<module>print('在主程式中輸出data: ',data)NameError:name'data'isnotdefined
由於變數data是在函數內部定義的,我們在主程式中使用變數data則會出現存取的變數不存在的問題,所以我們要注意在函數內部定義的變數為局部變量,未作特別聲明的話是不可以在函數外使用的。
全局變量我們也可以從字面意思中理解到它就是作用在全局的變量,有的同學可能自然而然的認為那麼全局變量一定是定義在主程序中的變量了,其實全局變量也是可以作用在函數中的,在這裡我們來介紹兩種全域變數的使用方式:
我們在主程式中定義的變數的作用域是全域性的,我們在定義的函數中也是可以直接使用這些變量,看下面的例子:
data='全域變數data'deftest():print('這是作用在函數中的全域變數:',data)test()print('這是作用在函數外的全域變數:',data)
輸出結果:
這是作用在函數中的全域變數:全域變數data這是作用在函數外的全域變數:全域變數data
這種方式就是我們通常情況下使用的全域變量,我們在主程式中定義的變數可以在函數內部直接的進行使用。
我們在函數內定義的變數也可以編程全域變量,這時候我們就要使用到global關鍵字。
首先我們先來看看當全域變數和局部變數的名字相同的時候會是一個怎麼樣的情況,看下面的例子:
data='這裡是全域變數data'print(data)deftest():data='這裡是局部變數data'print(data)test()print('再檢查全域變數data:',data)
輸出結果為:
這裡是全域變數data這裡是局部變數data再檢查一下全域變數data:這裡是全域變數data
這裡例子我們可以看出全域變數和局部變數的命名相同的時候是不影響全域變數的內容的,但是如果我們想要在函數中修改全域變數的值,那麼我們就要使用global關鍵字。
再看下面的例子:
data='這裡是全域變數data'print(data)deftest():globaldatadata='這裡是局部變數data'print(data)test()print('再檢查全域變數data:',data)
輸出結果為:
這裡是全域變數data這裡是局部變數data再檢查一下全域變數data:這裡是局部變數data
透過global關鍵字,在局部中聲明告訴這個函數global是一個全域變量,那麼修改了之後,全域中的變數都做了修改,global關鍵字就是可以讓一個變數變成全域變數。
當全域中沒有宣告變數的時候,我們在局部中也可以使用global關鍵字直接來宣告一個變數是全域變量,那麼我們在函數中定義的變數在主程式中也是可以使用的,看下面的例子:
deftest():globaldatadata='這是在局部建立的變數data'print('這是在函數中輸出:',data)test()print('這是在主程式中輸出:',data)
輸出為:
這是在函數中輸出:這是在局部建立的變數data這是在主程式中輸出:這是在局部建立的變數data
透過上面的例子我們可以了解到global關鍵字在控制全域變數時候的作用,另外要注意在寫程式的時候盡量避免全域變數和局部變數的名字一致,儘管他們作用於不同的區域,但是會影響對代碼的理解。本節就講到這裡,下一節我們來學習匿名函數。