Python中的partial便函式的理解

2021-09-26 15:21:52 字數 1835 閱讀 7429

偏函式(partial function)是通過將乙個函式的部分引數預先繫結為某些值,從而得到乙個新的具有較少可變引數的函式。在python中,可以通過functools中的partial高階函式來實現偏函式功能。

這個例子比較好地展示了functools.partial的用法,但是並沒有講清楚偏函式究竟應該用在什麼樣的場景中,總給人一種屠龍之術,華而不實的感覺。

例項1:用functools.partial生成自己的專屬函式

我們在編碼時經常會遇到這樣的場景,即根據乙個字串的內容而採取不同的處理邏輯,就像下面這樣:

初看之下,這種寫法也許還過得去。但是時間一長,你可能就忘了這些正規表示式究竟是幹什麼的了。於是,我們做了下面的重構:

這樣看起來感覺好多了。事實上,如果只有這三個函式的話,我是可以接受目前的寫法的。但是,如果你的**中有幾十個類似的用於判斷字串模式的函式,那麼就需要在乙個地方把它們統一管理起來,於是就有了下面的寫法:

在這段**中,我們通過functools.partial將re.search函式與不同的正規表示式繫結,從而得到了一系列供我們使用的專屬函式。通過這種方法,不但使得**更加簡練,而且提高了可讀性。

例項2:用partial生成具有繼承關係的輔助物件

假設我們現在要寫一段處理ajax請求的**,重構前的**是長這個樣子的:

這段**主要有以下幾個問題:

每次都需要呼叫json.dumps()

重複出現的狀態碼

以上問題使得這段**看起來不夠精煉,占用了較大篇幅但實際上沒有做太多事情。

所以,我們重構的第一步是要抽象出乙個jsonresponse物件來承載返回值:

經過第一步重構後的**如下:

所有返回httpresponse 的地方都被我們新引入的jsonresponse所替代。

接下來,通過functools.partial,我們可以對response做進一步的抽象,生成一系列jsonresponse的「子類」:

最終,重構後的**如下:

這樣,我們最大限度地減少了冗餘**,使**精煉易讀。

我們再來看最後乙個例子,看看partial是如何讓**變得簡練的。

例項3:django emails

看了今天的例子,大家是不是覺得python提供的partial工具非常的好用呢?不如趕快開啟電腦試一下吧。

python中的偏函式partial

python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下 int 函式可以把字串轉換...

C 中partial的使用

1.什麼是區域性型別?c 2.0 引入了區域性型別的概念。區域性型別允許我們將乙個類 結構或介面分成幾個部分,分別實現在幾個不同的.cs檔案中。區域性型別適用於以下情況 1 型別特別大,不宜放在乙個檔案中實現。2 乙個型別中的一部分 為自動化工具生成的 不宜與我們自己編寫的 混合在一起。3 需要多人...

C 中partial的解釋

partial是區域性型別概念中的修飾符,同乙個型別的各個部分都必須有,修飾符在編譯的時候仍會將各個部分的區域性型別合併成乙個完整的類。區域性型別允許我們將乙個類 介面或結構分成好幾個部分,分別實現在幾個不同的.cs檔案中。區域性型別適用於以下情況 1 型別特別大,不宜放在乙個檔案中實現。2 乙個型...