利用閉包返回一個計數器函數,每次調用它返回遞增整數:


函數代碼如下:

(麻煩版)

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”這樣的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM