函數代碼如下:
(麻煩版)
s = 3 #設置全局變量 def createCounter(): def counter(): global s #引用全局變量 s = s+1 return s return counter counterA = createCounter() print(counterA()) #每次調用子函數,都是會保留上次s的值進行計算的
原來在python的函數中和全局同名的變量,如果你有修改變量的值就會變成局部變量,在修改之前對該變量的引用自然就會出現沒定義這樣的錯誤了,如果確定要引用全局變量,並且要對它修改,必須加上global關鍵字。
(簡單版)
def createCounter(): s = [0] def counter(): s[0] = s[0]+1 return s[0] return counter
這里(簡單版)把一個需序列賦值給s,這樣做的目的是方便子函數能夠直接使用父函數內的變量值,而不會產生“local variable 'xxx' referenced before assignment”這樣的錯誤。