Python函數(shù)式編程模塊functools的使用與實踐
介紹
functools 模塊是 Python 的標(biāo)準(zhǔn)庫之一,它提供了一系列用于函數(shù)操作的函數(shù)。使用這些函數(shù)可以編寫更簡潔、更高效的代碼,尤其是在函數(shù)式編程范式中。以下是對 functools 模塊中一些重要功能做的一個分享
functools 模塊的功能
functools.partial
functools.partial
函數(shù)用于創(chuàng)建一個新的函數(shù),這個新函數(shù)是原始函數(shù)的一個偏應(yīng)用,即固定函數(shù)的一些參數(shù)。
from functools import partial # 定義一個函數(shù),需要多個參數(shù) def power(base, exponent): return base ** exponent # 使用 functools.partial 創(chuàng)建一個偏函數(shù),只保留一個參數(shù) square = partial(power, exponent=2) # 調(diào)用偏函數(shù) print(square(4)) # 輸出: 16
functools.wraps
functools.wraps
裝飾器用于保留被包裝函數(shù)的元信息,如文檔字符串、名稱和參數(shù)列表。
from functools import wraps # 定義一個函數(shù) def my_function(a, b): """函數(shù)""" return a + b # 使用 functools.wraps 裝飾器包裝一個函數(shù) @wraps(my_function) def wrapper(c, d): return my_function(c, d) # 檢查 wrapper 函數(shù)的元信息 print(wrapper.__doc__) # 輸出:函數(shù) print(wrapper.__name__) # 輸出:my_function
functools.lru_cache
functools.lru_cache
裝飾器用于緩存函數(shù)的返回值,這對于避免重復(fù)計算昂貴的函數(shù)調(diào)用非常有用。
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if n <= 1: return n return fibonacci(n - 1) + fibonacci(n - 2) # 調(diào)用 fibonacci 函數(shù) print(fibonacci(100)) # 354224848179261915075
functools.reduce
functools.reduce
函數(shù)用于將一個二元操作函數(shù)累積地應(yīng)用到一個序列的所有元素上,從左到右,直到序列結(jié)束。
from functools import reduce # 定義一個函數(shù),計算乘積 def multiply(x, y): return x * y # 使用 reduce 計算 [1, 2, 3, 4] 的乘積 print(reduce(multiply, [1, 2, 3, 4])) # 輸出: 24
實例演示
使用 functools.partial 創(chuàng)建固定參數(shù)的函數(shù)
from functools import partial def add(a, b, c): return a + b + c partial_add = partial(add, c=5) print(partial_add(1, 2)) # 輸出: 8
使用 functools.wraps 保留原函數(shù)的文檔字符串和名稱
from functools import wraps def my_function(a, b): """函數(shù)""" return a + b @wraps(my_function) def my_wrapper(c, d): return my_function(c, d) print(my_wrapper.__doc__) # 輸出:函數(shù)
使用 functools.lru_cache 加速函數(shù)的執(zhí)行
from functools import lru_cache @lru_cache(maxsize=128) def memoized_factorial(n): if n == 0: return 1 return n * memoized_factorial(n - 1) print(memoized_factorial(5)) # 輸出: 120
在這個例子中,memoized_factorial
函數(shù)使用 lru_cache
來緩存之前計算的結(jié)果。這意味著當(dāng)函數(shù)被重復(fù)調(diào)用時,如果之前已經(jīng)計算過相同參數(shù)的結(jié)果,functools 將返回緩存的結(jié)果,而不是重新計算。
使用 functools.reduce 實現(xiàn)自定義的 reduce 操作
from functools import reduce def average(total, new_value): return total + new_value result = reduce(average, [1, 2, 3, 4], 0) / len([1, 2, 3, 4]) print(result) # 輸出: 2.5
在這個例子中,定義了一個 average
函數(shù),它將一個新值加到總和中。然后使用 reduce
函數(shù)來應(yīng)用這個 average
函數(shù)到列表 [1, 2, 3, 4]
上,初始值為 0
。這樣就得到了列表的平均值。
functools 模塊為 Python 的函數(shù)式編程提供了許多有用的工具。通過學(xué)習(xí)如何使用 functools.partial
、functools.wraps
、functools.lru_cache
和 functools.reduce
,可以更加高效地處理函數(shù)和數(shù)據(jù)集合。這些功能不僅可以提高代碼的性能,還可以使代碼更加清晰和易于維護。
到此這篇關(guān)于Python函數(shù)式編程模塊functools的使用與實踐的文章就介紹到這了,更多相關(guān)Python functools內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django數(shù)據(jù)庫類庫MySQLdb使用詳解
Django項目要操作數(shù)據(jù)庫,首先要和數(shù)據(jù)庫建立連接,才能讓程序中的數(shù)據(jù)和數(shù)據(jù)庫關(guān)聯(lián)起來進行數(shù)據(jù)的增刪改查操作。這篇文章主要介紹了Django數(shù)據(jù)庫類庫MySQLdb使用詳解,感興趣的小伙伴們可以參考一下2019-04-04使用Python自制數(shù)據(jù)庫備份工具實現(xiàn)數(shù)據(jù)定時覆蓋
這篇文章主要為大家詳細(xì)介紹了如何使用Python自制數(shù)據(jù)庫備份工具實現(xiàn)數(shù)據(jù)定時覆蓋功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2024-03-03Python實現(xiàn)斐波那契數(shù)列的示例代碼
斐波那契數(shù)列是一種經(jīng)典的數(shù)學(xué)問題,在計算機科學(xué)和編程中經(jīng)常被用來演示算法和遞歸的概念,本文將詳細(xì)介紹斐波那契數(shù)列的定義、計算方法以及如何在Python中實現(xiàn)它,需要的可以參考下2024-01-01