Python全域性變數和區域性變數

2021-10-06 05:47:48 字數 1836 閱讀 4441

全域性變數與區域性變數兩者的本質區別就是在於作用域

用通俗的話來理解的話,

全域性變數是在整個py檔案中宣告,全域性範圍內都可以訪問

區域性變數是在某個函式中宣告的,只能在該函式中呼叫它,如果試圖在超出範圍的地方呼叫,程式就爆掉了

如果在函式內部定義與某個全域性變數一樣名稱的區域性變數,就可能會導致意外的效果,可能不是你期望的。因此不建議這樣使用,這樣會使得程式很不健全

直接來看幾個例子來理解全域性變數和區域性變數的區別吧:

demo1:

def fun(x):

y=2print(「乘法的執行結果:」,x*y)

num1=1

print(「初始num1=」,num1)

fun(num1)

print(「y的值是:」,y)

執行結果:

報錯的原因是因為試圖訪問區域性變數,但是訪問的地方不在該變數y的作用域中

demo2:

def fun():

num1=2

print(「函式內修改後num1=」,num1)

num1=1

print(「初始num1=」,num1)

fun()

print(「執行完函式後num1=」,num1)

執行結果:

可以看到在函式內部對全域性變數的修改後,在函式執行完畢,修改的結果是無效的,全域性變數並不會受到影響

再看:demo3:

def fun():

num1*=2

print(「函式內修改後num1=」,num1)

num1=1

print(「初始num1=」,num1)

fun()

print(「執行完函式後num1=」,num1)

執行結果:

報錯了。這是因為在fun()函式使用了區域性變數num1,它只是個跟全域性變數同名的區域性變數,使用前還是要賦值,因此再次強調不要這樣使用

global關鍵字

如果真的想要在函式體內修改全域性變數的值,就要使用global關鍵字

demo4:

def fun():

global num1

num1=2

print(「函式內修改後num1=」,num1)

num1=1

print(「初始num1=」,num1)

fun()

print(「執行完函式後num1=」,num1)

執行結果:

使用global關鍵字就是告訴python編譯器這個變數不是區域性變數而是全域性變數,其實有點像是"引用"的意思

nonlocal關鍵字

再看看另乙個跟變數相關的關鍵字nonlocal,字面意思就是指當前的這個變數不是區域性變數。nonlocal是python3.0中新增的關鍵字,python2.x不支援

先來看看下面這段**

def fun():

num2=3

def fun2():

num2*=2

print(「num2=」,num2)

return fun2()

fun()

執行結果:

錯誤的原因跟前面的差不多,就是使用了未定義的區域性變數,然而num2也不是全域性變數,只是fun2函式的外層變數,強行使用global定義num2的話同樣會報錯(不信你試試)

這時候需要使用nonlocal關鍵字:

def fun():

num2=3

def fun2():

nonlocal num2

num2*=2

print(「num2=」,num2)

return fun2()

fun()

執行結果:

如此,程式就能正常執行

python全域性變數和區域性變數

總體來說跟c 差不多 有一點不一樣的是,當乙個全域性變數在某一函式中出現了賦值之後,函式中使用的是相同名字的區域性變數,而全域性變數不受影響 如a 100 def f a 100 print a f 這裡,函式內部的變數名如果第一次出現,且出現在 前面,即被視為定義乙個區域性變數。而函式中的a是乙個...

python全域性變數和區域性變數

當你在函式定義內宣告變數的時候,它們與函式外具有相同名稱的其他變數沒有任何關係,即變數名稱對於函式來說是 區域性 的。這稱為變數的 作用域 所有變數的作用域是它們被定義的塊,從它們的名稱被定義的那點開始。使用區域性變數 usr bin python filename func local.py de...

Python全域性變數和區域性變數

定義在函式內部的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域。區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。如下例項 total 0 這是乙個全域性變數 可寫函式說明 def sum arg1,a...