一、 介紹
在Python中,partial function(偏函數)是一種很有用的函數,它能夠減輕我們使用每個函數時所需要傳入的所有參數的負擔,從而使代碼更加乾淨、緊湊和可維護。在本文中,我們將詳細介紹Python中偏函數的使用,以及如何使用它們來改善我們的代碼。
二、 什麼是偏函數?
當我們使用函數時,我們經常需要在每次調用該函數時傳遞所有參數。但有時我們可能只想傳遞其中的一些參數,而其他參數可以使用默認值。這時,Python偏函數就派上用場了。
換句話說,partial function 通過預先設置函數的某些參數來創建一個新函數。這個新函數只需要接收未預設的那些參數即可。
三、 偏函數在Python中的使用
1. functools.partial(function, *args, **keywords)
Python中偏函數的標準庫是functools.partial 。下面是一個很簡單的例子:
import functools def add(a, b): return a + b increment = functools.partial(add, b=1) print(increment(3))
這裡,我們將add函數中的第二個參數b設置為1,從而獲得一個新函數increment。 like
2. 類方法的partial function
同樣的,我們可以使用偏函數改進類方法,下面的例子中我們使用類方法和偏函數去改進數據生成的方法。
import functools class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height @classmethod def create_square(cls, length): return cls(length, length) Square = functools.partial(Rectangle, height=5) square = Square(width=10) print(square.area())
3. 使用偏函數綁定方法
我們也可以使用偏函數裝飾方法,下面是一些示例:
import functools class Person: def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname def get_name(self, separator=" "): return self.firstname + separator + self.lastname person = Person("John", "Doe") get_fullname = functools.partial(person.get_name, separator=".") print(get_fullname()) # John.Doe get_lastname = functools.partial(person.get_name, separator=", ") print(get_lastname()) # John, Doe
4. 高階函數與偏函數
我們可能已經分析過如何發揮Python中的高階函數的威力,將函數傳遞給函數並處理結果。然而,與偏函數結合使用時,我們甚至可以進一步減少對程序的代碼量
import functools def running_total(numbers): return functools.reduce(lambda a, x: a + x, numbers) numbers = [1,2,3,4,5] partial_sum = functools.partial(running_total, numbers) print(partial_sum()) # 15 numbers.append(6) print(partial_sum()) # 21
四、 總結
Python的偏函數為我們提供了一種清晰、簡潔、可讀以及可維護的API來裝飾我們的代碼。它們可以大大減少不必要的重複代碼,使我們的代碼變得更加簡潔和可讀。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183913.html