Python之旅 全域性變數 區域性變數

2021-08-19 16:41:04 字數 2725 閱讀 9519

1.全域性變數 vs 區域性變數

a. 全域性變數在整個檔案內有效;

b.區域性變數在函式內有效;

c.當全域性變數和區域性變數同名,區域性變數有效。

若定義了全域性變數,則可在函式內直接使用全域性變數。

a = 1

b = [23, 98]

def func():

print("a = ", a) #使用全域性變數

print("b = ", b)

b[0] = 9

print("b = ", b)

func()

輸出結果:

a = 1

b = [23, 98]

b = [9, 98]

若在函式內,存在對全域性變數重新賦值,在python中將解析為定義乙個變數。

a = 1

b = [23, 98]

def func():

if(1 == a): #區域性變數a定義前使用,語法錯誤

a = 2 #區域性變數a定義

print("a = ", a)

print("b = ", b) #全域性變數b

b[0] = 9

print("b = ", b)

func()

執行結果:

traceback (most recent call last):

file "變數.py", line 13, in func()

file "變數.py", line 5, in func

if(1 == a):

unboundlocalerror: local variable 'a' referenced before assignment

若需使用全域性變數,則在函式內使用global關鍵字宣告全域性變數即可。

a = 1

b = [23, 98]

def func():

global a #全域性變數

if(1 == a):

a = 2

print("a = ", a)

print("b = ", b)

b[0] = 9

print("b = ", b)

func()

輸出結果:

a = 2

b = [23, 98]

b = [9, 98]

若不需要使用全域性變數,且和全域性變數同名,則需要在函式內對其進行一次定義,再使用區域性變數。

a = 1

b = [23, 98]

def func():

a = 1 #定義區域性變數

if(1 == a):

a = 2

print("a = ", a)

print("b = ", b)

b[0] = 9

print("b = ", b)

func()

從前面的例子可以看出,對全域性列表的某乙個成員賦值符合語法規則。但是,函式內對與全域性列表變數b再次賦值,即表示區域性變數的定義。在變數定義之前使用,將會報告錯誤。

a = 1

b = [23, 98]

def func():

print("a = ", a)

print("b = ", b) #區域性變數定義前使用,語法錯誤

b[0] = 9

print("b = ", b)

if(9 == b[0]):

b = [28, 98] #區域性變數定義

print("b = ", b)

func()

輸出結果:

a = 1

traceback (most recent call last):

file "變數.py", line 15, in func()

file "變數.py", line 6, in func

print("b = ", b)

unboundlocalerror: local variable 'b' referenced before assignment

綜上所述:1. 函式內對與全域性變數同名的變數賦值,表示定義乙個區域性變數。變數必須先定義,後使用。

2. 對於列表類,可以對全域性變數列表的乙個元素b[0]重新賦值,不表示定義乙個區域性變數。

建議:

1. 避免定義乙個和全域性變數同名的區域性變數;

2. 函式內使用全域性變數,使用global在函式內對其進行宣告。

2023年7月21日更新:

此處全域性變數和區域性變數的問題,其實就是最內巢狀作用域規則。

python虛擬機器在執行python位元組碼時,會去搜尋變數物件所在的作用域:

a.先從函式內local搜尋變數物件;

b.再從全域性(即檔案內)global搜尋變數物件;

c.最後從內建的(builtin)變數物件中搜尋。

搜尋不到對應的變數物件報告錯誤。

static全域性 區域性變數,全域性變數及區域性變數

1 static變數和全域性變數都是分配在 靜態儲存區 2 static全域性變數 static區域性變數 全域性變數和區域性變數區別 他們都是分配在 靜態儲存區內,都是在程式開始的時候初始化的,他們的區別是作用域不同,static全域性變數作用域是在申明所在的檔案中,而全域性變數是全域性的,其他檔...

javascript複習 全域性變數與區域性變數

全域性變數 global variable 可以在宣告它的指令碼中任何位置引用它。區域性變數 local variable 只存在於對它做出宣告的函式內部。因此在函式內部我們既可以使用全域性變數也可以使用這個函式的區域性變數。這可能會導致一些問題。如果在函式內部不小心使用了全域性變數的名字,即使本意...

python基礎學習十一 全域性變數與區域性變數

變數作用域指的是變數生效的範圍,主要分為兩類 區域性變數和全域性變數。所謂區域性變數是定義在函式體內部的變數,即只在函式體內部生效。def testa a 100print a testa 100 print a 報錯 name a is not defined變數a是定義在 testa 函式內部的...