Python 關鍵字global全域性變數詳解

pythontab發表於2018-09-28

變數作用域

一般在函式體外定義的變數成為全域性變數,在函式內部定義的變數稱為區域性變數。

全域性變數所有作用域都可用,區域性變數只能在本函式可用,變數的使用順序是,區域性變數 > 全域性變數, 也就是說:優先使用區域性變數


那麼問題來了, 如果想在函式內使用全域性變數,或改變全域性變數的值, 應該怎麼做呢?


global關鍵字

為了解決函式內使用全域性變數的問題,python增加了global關鍵字, 利用它的特性, 可以指定變數的作用域。

global關鍵字的作用:宣告變數var是全域性的


程式碼例項

例項1:

函式優先使用區域性變數

str = 'global'
def func1():
    str = 'local'
    print(str)
func1()
print(str)

結果:

local
global


例項2:

在沒有區域性變數的情況下, 使用全域性變數

str = 'global'
def func1():
    print(str)
func1()
print(str)

結果:

global
global


例項3:

改變全域性變數的值, 透過例項1可以看到, 函式內賦值並不能改變全域性變數的值,所以需要global關鍵字

str = 'global'
def func1():
    global str
    str = 'local'
    print(str)
func1()
print(str)


結果:

local
local


其他用法

你可以使用同一個global語句指定多個全域性變數。

例如

global var1, var2, var3


特殊型別

字串、數字型別是不能被在區域性被修改的,除非使用global關鍵字,但是 列表,字典是可修改,但不能重新賦值,如果需要重新賦值,需要在函式內部使用global定義全域性變數


程式碼例項1:

list = ['global', 'pythontab.com']
def func1():
    list.append('bbs.pythontab.com')
    print(list)
func1()
print(list)

結果:

['global', 'pythontab.com', 'bbs.pythontab.com']
['global', 'pythontab.com', 'bbs.pythontab.com']


發現上面的list並沒有使用global但是值卻改變了, 說明列表是可以在區域性被修改的


程式碼例項2:

list = ['global', 'pythontab.com']
def func1():
    list = ['docs.pythontab.com']
    print(list)
func1()
print(list)

結果:

['docs.pythontab.com']
['global', 'pythontab.com']

區域性變數賦值不能改變全域性變數的值


程式碼例項3:

list = ['global', 'pythontab.com']
def func1():
    global list
    list = 'docs.pythontab.com'
    print(list)
func1()
print(list)

結果:

docs.pythontab.com
docs.pythontab.com

使用了global關鍵字後, 變數被重新賦值


相關文章