Python小知識 工廠函式

2021-06-26 14:39:21 字數 1167 閱讀 8466

工廠函式,或者說閉包,是能夠記住巢狀作用域的變數值的函式。儘管類是最適合用作記憶狀態的,因為它們通過屬性賦值讓這個過程變得很明了,但是,像工廠函式也提供了一種替代的解決方法。

例如,工廠函式有時候用於需要及時生成事件處理、實時對不同情況進行反饋的程式中(例如,使用者的輸入時無法進行**的)。

>>>def maker(n):

... def action(x): # make and return action

... return x ** n # action retains n from enclosing scope

... return action

...

這定義了乙個外部的函式,這個函式簡單地生成並返回了乙個巢狀的函式。

>>>f = maker(2)

>>>f

我們得到的是生成的內嵌函式的乙個引用。這個內嵌函式式通過執行內嵌的def而建立的。如果現在呼叫從外部得到的那個函式:

>>>f(3)

9>>>f(4)

16

它將會呼叫內嵌的函式。也就是說,maker函式內部的名為action的函式。這一部分最不平常的就是,內嵌的函式記住了整數2,即maker函式內部的變數n的值,儘管在呼叫執行f時maker已經返回來值並退出。實際上,在本地作用域內的n被作為執行的狀態資訊保留了下來,我們返回其引數的平方運算。

現在,如果再呼叫外層的函式,將得到乙個新的有不同狀態資訊的巢狀函式——得到了引數的三次方而不是平方,但是最初的仍像往常一樣是平方。

>>>g = maker(3)

>>>g(3)

27>>>f(3)

9

這是一種相當高階的技術,除了那些擁有函式式程式設計背景的程式設計師們,在實際使用中不會常常見到。另一方面,巢狀的作用域常常被lambda函式建立表示式使用——因為它們是表示式,它們幾乎總是巢狀在乙個def中。此外,函式巢狀通常用作裝飾器——在某些情況下,它是最為合理的編碼模式。

通常來說,類是乙個更好的像這樣進行「記憶」的選擇,因為它們讓狀態變得很明確。不使用類的話,全域性變數、像這樣的巢狀作用域引用以及預設的引數就是python的函式能夠保留狀態資訊的主要方法了。

python小知識 Python小知識

1 python是一種解釋性語言,當程式執行時,一行一行的解釋,並執行 優點 除錯 很方便,開發效率高,並且可以跨平台 不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。缺點 執行速度慢。python的種類 cpython ipython pypy jython ironpython ...

python小知識 python小知識

一 列表 l 1,2 m l l和m同時指向列表物件,內容為 1,2 l l 3,4 系統新增了乙個物件,內容為 1,2,3,4 l,m 1,2,3,4 1,2 l 1,2 m l l 3,4 對列表在原處做修改 l,m 1,2,3,4 1,2,3,4 二 python程式設計中的中文編碼問題 問題...

python函式知識 Python 函式知識

背景 在學習函式之前,一直遵循 面向過程程式設計,即 根據業務邏輯從上到下實現功能,其往往用一長段 來實現指定功能,開發過程中最常見的操作就是貼上複製,也就是將之前實現的 塊複製到現需功能處,如下 while true if cpu利用率 90 傳送郵件提醒 連線郵箱伺服器 傳送郵件 關閉連線 if...