Python 區域性變數與全域性變數

2021-07-16 14:31:33 字數 1539 閱讀 3846

問題由來:

考慮到想在執行結束後的使用者空間裡面檢視一下資料,我把data1作為全域性變數來進行處理。

data1 = 

function

a1()

data1 = readdata

function

a2()

data1.dealdata

if __name__ == "__main__":

a1()

a2()

此時,a2()函式沒有任何輸出,即data1為空。

1、函式內部的變數名如果第一次出現,且出現在=前面,即被視為定義乙個區域性變數,不管全域性域中有沒有用到該變數名,函式中使用的將是區域性變數。

num = 100

deffunc

(): num += 100#這裡可以還原成原來的式子:num = num + 100

print(num)

func()

num首先被當成了乙個區域性變數,到等號右側以後發現這個變數還沒有賦值就被用於計算,於是報錯。

2、函式內部的變數名如果第一次出現,且出現在=後面,且該變數在全域性域中已定義,則這裡將引用全域性變數,如果該變數在全域性域中沒有定義,當然會出現「變數未定義」的錯誤。

num = 100

deffunc

(): a = num + 1

print(a)

func()

此時的引用的是全域性變數中的num。其實此處可以再進行總結:除去「=」的賦值操作外的所有操作我們都認為會進行全域性變數的引用。

3、我們從第乙個說明也能看出來,程式執行是會先查詢區域性變數,如果沒有找到才會去查詢全域性變數。

4、在函式中,如果想給全域性變數賦值,需要在變數前面加上global關鍵字。

num = 100

deffunc

():global num

num += 100

print(num)

func()

事實上,在關於區域性變數跟全域性變數的討論,我們還可以看關於「這個變數的引用是否明確」來判斷。

在num += 1 這句中,它是「有歧義的「,因為num既可以是表示引用全域性變數,也可以是建立乙個新的區域性變數,所以在python中,預設它的行為是建立區域性變數並使用該變數,除非顯式宣告global.

在a = num + 1這句中,它是「明確的」,因為如果把num當作是區域性變數的話,它會報錯,所以它只能是引用全域性的num,故不需要多此一舉顯式宣告global。

data1 = #這個拿掉貌似也沒有問題

function

a1()

global data1

data1 = readdata

function

a2()

data1.dealdata

if __name__ == "__main__":

a1()

a2()

參考部落格:

python 全域性變數與區域性變數

目錄 一 變數作用域 二 全域性變數 區域性變數 2.1 global 和nonlocal關鍵字 python中,變數不是在 都可以訪問的,訪問許可權決定於變數是在 被賦值的。變數作用域決定了哪一部分程式可以訪問哪些特定的變數。python的作用域一共分為四種 程式查詢變數的規則為 l e g b ...

python區域性變數與全域性變數

區域性變數 區域性變數是在函式內部進行使用,無法全域性共享 全域性變數 全域性變數在函式外部進行共享使用,可以接收函式的呼叫 區域性變數 def demo1 num 1print num defdemo2 print num print會報錯,原因顯示為沒有定義num這個變數,所以證明在demo1中...

python全域性變數與區域性變數

全域性變數 指在函式之外定義的變數,一般沒有縮排,在程式執行的全過程有效 區域性變數 指在函式內部使用的變數,僅在函式內部有效,當函式退出時變數將不存在 例1 n 1 全域性變數 def func a,b c a b c是區域性變數,a和b作為函式引數也是區域性變數 這個例子說明,當函式執行完退出後...