一、 介紹
在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-hant/n/183913.html
微信掃一掃
支付寶掃一掃