? 當(dāng)我們在一個函數(shù)中創(chuàng)建一個變量時,默認(rèn)情況下它是本地變量。? 當(dāng)我們在一個函數(shù)之外定義一個變量時,默認(rèn)情況下它是全局變量。你不必使用 global 關(guān)鍵字。? 我們使用 global 關(guān)鍵字在一個函數(shù)中來讀寫全局變量。? 在一個函數(shù)外使用 global 關(guān)鍵字沒有效果。
使用 global 關(guān)鍵字(含示例)
我們來舉個例子。
示例 1:從函數(shù)內(nèi)部訪問全局變量
c =1#全局變量
def add():
print(c)
add()
運行程序,輸出為:
1
但是我們可能有一些場景需要從函數(shù)內(nèi)部修改全局變量。
示例 2:在函數(shù)內(nèi)部修改全局變量
c =1#全局變量
def add():
c = c +2#將 c 增加2
print(c)
add()
運行程序,輸出顯示錯誤:
UnboundLocalError:local variable 'c' referenced before assignment
這是因為在函數(shù)中,我們只能訪問全局變量但是不能修改它。
解決的辦法是使用 global 關(guān)鍵字。
示例 3:使用 global 在函數(shù)中改變?nèi)肿兞?/p>
c =0#global variable
def add():
global c
c = c +2#將 c 增加2
print('Inside add():', c)
add()
print('In main:', c)
運行程序,輸出為:
Inside add():2
In main:2
在上面的程序中,我們在 add() 函數(shù)中定義了 c 將其作為全局關(guān)鍵字。
然后,我們給變量 c 增加 2,即 c = c + 2。之后,我們調(diào)用了 add() 函數(shù)。最后,打印全局變量 c。
在 config.py 模塊中保存了全局變量 a 和 b。在 update.py 文件中,我們導(dǎo)入了 config.py 模塊并改變了 a 和 b 的值。同樣,在 main.py 文件,我們導(dǎo)入了 config.py 和 update.py 模塊。最后,我們打印并測試全局變量的值,無論它們是否被改變。
在嵌套函數(shù)中的全局變量
以下是如何在嵌套函數(shù)中使用全局變量。
示例 5:在嵌套函數(shù)中使用全局變量
def foo():
x =20
def bar():
global x
x =25
print('Before calling bar: ', x)
print('Calling bar now')
bar()
print('After calling bar: ', x)
foo()
print('x in main : ', x)
輸出為:
Before calling bar:20
Calling bar now
After calling bar:20
x in main :25
在上面的程序中,我們在一個嵌套函數(shù) bar() 中聲明了全局變量。在 foo() 函數(shù)中, 變量 x 沒有全局關(guān)鍵字的作用。
調(diào)用 bar() 之前和之后, 變量 x 取本地變量的值,即 x = 20。在 foo() 函數(shù)之外,變量 x 會取在函數(shù) bar() 中的值,即 x = 25。這是因為在 bar() 中,我們對 x 使用 global 關(guān)鍵字創(chuàng)建了一個全局變量(本地范圍)。