Functools — Python 中的高階函式和對可呼叫物件的運算


在 Python 中,函式被稱為高階函式。這意味著它可以作為引數傳遞給另一個函式,並且/或者可以返回另一個函式。functools 模組為這種高階函式提供了重要的實用程式。

partial() 函式

此函式返回一個可呼叫的“partial”物件。該物件本身的行為類似於函式。partial() 函式接收另一個函式作為引數,並凍結函式引數的一部分,從而產生一個具有簡化簽名的新的物件。

內建的 int() 函式將數字轉換為十進位制整數。int() 的預設簽名是

int(x, base = 10)

partial() 函式可用於建立可呼叫的函式,其行為類似於 int() 函式,其中 base 引數預設為二。

>>> import functools
>>> binint = functools.partial(int, base = 2)
>>> binint('1001')
9

在以下示例中,使用者定義的函式 myfunction() 被用作 partial 函式的引數,透過在原始函式的引數之一上設定預設值來實現。

>>> def myfunction(a,b):
return a*b

>>> partfunction = functools.partial(myfunction,b = 10)
>>> partfunction(10)
100

partialmethod()

此函式返回一個新的 partialmethod 描述符,其行為類似於 partial,但不同之處在於它被設計為用作方法定義,而不是直接可呼叫。

Cmp_to_key() 函式

Python 2.x 具有用於比較兩個物件的 cmp() 函式。Python 3 已棄用它。functools 模組提供了 cmp_to_key() 函式,透過該函式可以執行使用者定義類物件的比較

from functools import cmp_to_key

class test:
def __init__(self,x):
self.x = x
def __str__(self):
return str(self.x)
def cmpr( a,b):
if a.x> = b.x: return True
if a.x<b.x: return False
mykey = cmp_to_key(cmpr)

reduce() 函式

reduce() 函式接收兩個引數,一個函式和一個可迭代物件。但是,它返回單個值。引數函式累積地應用於列表中的兩個引數,從左到右。函式在第一次呼叫中的結果成為第一個引數,列表中的第三個專案成為第二個。這將重複進行,直到列表用盡。

在下面的示例中,定義了 mult() 函式以返回兩個數字的乘積。此函式與 1 到 10 之間的數字範圍一起用於 reduce() 函式中。輸出是 10 的階乘值。

import functools
def mult(x,y):
return x*y

num = functools.reduce(mult, range(1,11))
print ('factorial of 10: ',num)

輸出

factorial of 10: 3628800

更新於: 2019-07-30

211 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.