Skip to content

[Python] 使用 functools.partial() 固定函式參數並返回新的 partial 物件

Last Updated on 2023-03-19 by Clay

關於 partial 函式

在閱讀一些大神所寫的 Python 原始碼的過程中,想必偶爾會見到 functools.partial 的使用,而直觀上,這個函式的意義似乎並不是那麼好理解。那麼,partial() 函式的功用究竟是什麼呢?

在 Python 中,functools 模組提供了一些用於高階函數操作的工具,其中之一就是 partialpartial 可以用來實現函數區域性應用Function Partial Application),亦即將一個函式的部分參數固定,並生成一個新的函式回傳,以便於後續應用。

最重要的是,我們就不用再重新自己手動定義一個新的函式了。

那這樣做的好處是什麼?因為有時候,我們會希望能對我們的函式進行參數的固定,大多數時候這樣可以提升可讀性與重複利用性;在某些需要傳遞函式給另一個函式使用的情況時,也能省略掉傳遞參數這一步驟。


使用方法

以下是使用 partial 函式的基本語法:

from functools import partial

new_function = partial(function, arg1, arg2, ...)


這裡的 function 是原始函式,arg1arg2 等是需要固定的參數。new_function 是經過區域性應用後的新函式。

舉個實際的例子。假設我們有一個簡單的加法函數:

def add(x, y):
    return x + y


我們想要創建一個新的函數 add_five,將第一個參數固定為 5,只需要提供第二個參數即可。使用 partial 函式可以輕鬆實現:

from functools import partial

add_five = partial(add, 5)

result = add_five(3)  # Equal to add(5, 3)
print(result)  # result = 8


在官方手冊的範例中,是採用了以下例子:

from functools import partial

basetwo = partial(int, base=2)
print(basetwo("10010"))  # 18


如果我們固定住了參數,便能簡單建立全新的功能性函式。


總結

Python 的 functools.partial() 函式能夠實現函式的區域性應用,亦即將部分參數固定,建立一個全新的函式。

這樣的好處是有以下特點:

  1. 程式碼簡潔:使用 partial 函式可以使程式碼更簡潔,同時避免了開發者重新手動定義新的、功能相似的函式。
  2. 提高程式碼可讀性:partial 函式可以明確表示出對原始函式參數的固定,讓程式碼的邏輯更加清晰與便於閱讀。
  3. 靈活性高:partial 函式可以應用於任何可調用物件(callable),包括自定義函式、內建函式以及類別。

References


Read More

Tags:

Leave a Reply