變數作用域
一般在函式體外定義的變數成為全域性變數,在函式內部定義的變數稱為區域性變數。
全域性變數所有作用域都可用,區域性變數只能在本函式可用,變數的使用順序是,區域性變數 > 全域性變數, 也就是說:優先使用區域性變數
那麼問題來了, 如果想在函式內使用全域性變數,或改變全域性變數的值, 應該怎麼做呢?
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關鍵字後, 變數被重新賦值