python中的工廠函數

工廠函數:一個能夠記住嵌套作用域的變量值的函數,儘管那個作用域已經不存在了。

>>> def maker(N):
    def action(X):
        return X**N
    return action

這定義了一個外部函數,這個函數簡單地生成並且返回了一個嵌套的函數,卻並不調用這個內嵌函數。如果調用外部函數就得到一個生成的內嵌函數的一個引用。這個內嵌函數是通過運行內嵌def而創建的。如果再調用外部得到的那個函數:

>>> f = maker(2)
>>> f(3)                    # 3的平方
9
>>> f(4)                    # 4的平方
16
>>> 

它將調用內嵌函數,也就是說,maker函數內部的名爲action的函數。這一部分最不平凡的就是,內嵌的函數記住了2,即maker含函數內部的變量N的值,儘管在調用執行f時maker已經返回了值並且退出。實際上,在本地作用域的N被作爲執行的狀態信息保留了下來,我們返回其參數的平方運算。
如果再調用外層函數,將得到一個新的有不同狀態信息的嵌套函數,得到了一個參數的三次方而不是平方,但是最初的仍像往常一樣是平方。

>>> g = maker(3)
>>> g(3)             # 3的3次方
27
>>> f(3)             # 3的2次方
9
>>> 

這能奏效,是因爲像這樣對一個工廠函數的每次調用,都得到了自己的狀態信息集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章