工廠函式:乙個能夠記住巢狀作用域的變數值的函式,儘管那個作用域已經不存在了。
>>>
defmaker
(n):
defaction
(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>>>
這能奏效,是因為像這樣對乙個工廠函式的每次呼叫,都得到了自己的狀態資訊集合。 Python之工廠函式
python2.2統一了型別和類,所有的內建型別現在也都是類,在這基礎之上,原來的所謂內建轉換函式比如int type list 等,現在都成了工廠函式。也就是說雖然他們看上去有點像函式,實質上他們是類。下面這些大家熟悉的工廠函式在之前的python版本中被稱為內建函式 以前沒有工廠函式的其他函式,...
Python小知識 工廠函式
工廠函式,或者說閉包,是能夠記住巢狀作用域的變數值的函式。儘管類是最適合用作記憶狀態的,因為它們通過屬性賦值讓這個過程變得很明了,但是,像工廠函式也提供了一種替代的解決方法。例如,工廠函式有時候用於需要及時生成事件處理 實時對不同情況進行反饋的程式中 例如,使用者的輸入時無法進行 的 def mak...
python中的工廠設計模式
簡單工廠模式相當於是乙個4s店中有各種汽車,建立在乙個類中,客戶無需知道具體汽車型號,只需要知道汽車類所對應的引數即可。但是工廠的職責過重,而且當型別過多時不利於系統的擴充套件維護。現代汽車4s店類 class carstore object 示例方法 建立工廠返回工廠物件引用 def init s...