全域性變數不符合引數傳遞的精神,所以,平時我很少使用,除非定義常量。今天有同事問乙個關於全域性變數的問題,才發現其中原來還有門道。
程式大致是這樣的:
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
就這麼簡單!
Energy的開發筆記
演化為 foreach jobjiect jo in ja string jsontext jsonreader reader new jsontextreader new stringreader jsontext while reader.read 陣列型資料 三 對不同儀表裝置的呼叫方法與結果...
python實現2048遊戲開發筆記
一 遊戲描述 這裡省略了 估計來看的人都玩過2048遊戲 二 遊戲設計 首先將遊戲分解成若干個區域性一一實現 1 輸入規則 asdw分別代表左下由上,r為reset,q為退出,其他不執行。2 輸出介面 def display for i in range 4 print for j in range...
Python學習筆記(三) Python中的變數
變數 就是給資料起個名字 變數是計算機記憶體中的一塊區域,變數可以儲存規定範圍內的值,而且值可以改變。c語言宣告變數,需要先宣告變數的型別,如 int a python則是一種引用,對應的是記憶體中的值,可以改變 python變數的命名 變數名由字母 數字 下劃線組成 不能以數字開頭 不可以使用關鍵...