全域性變數不符合引數傳遞的精神,所以,平時我很少使用,除非定義常量。今天有同事問乙個關於全域性變數的問題,才發現其中原來還有門道。
程式大致是這樣的:
constant = 0
def modifyconstant() :
print constant
constant += 1
return
if __name__ == 『__main__』 :
modifyconstant()
print constant
執行結果如下:
unboundlocalerror: local variable 『constant』 referenced before assignment
看來,全域性變數在函式modifyconstant中邊成了區域性變數,似乎全域性變數沒有生效?
做點修改:
constant = 0
def modifyconstant() :
print constant
#constant += 1
return
if __name__ == 『__main__』 :
modifyconstant()
print constant
執行正常,看來函式內部是可以訪問全域性變數的。
所以,問題就在於,因為在函式內部修改了變數constant,python認為 constant是區域性變數,而print constant又在constant += 1之前,所以當然會發生這種錯誤。
那麼,應該如何在函式內部訪問並修改全域性變數呢?應該使用關鍵字global來修飾變數(有點像php):
constant = 0
def modifyconstant() :
global constant
print constant
constant += 1
return
if __name__ == 『__main__』 :
modifyconstant()
print constant
就這麼簡單!
python中全域性變數
在python中,全域性變數一般有兩種使用方式 第一種 是在乙個單獨的模組中定義好,然後在需要使用的全域性模組中將定義的全域性變數模組匯入。第二種 直接在當前的模組中定義好,然後直接在本模組中通過global宣告,然後使用 具體的方法如下所示 第一種 solr url def tt global s...
python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...
Python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...