欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python函數(shù)式編程模塊functools的使用與實(shí)踐

 更新時(shí)間:2024年03月07日 15:46:08   作者:盜理者  
本文主要介紹了Python函數(shù)式編程模塊functools的使用與實(shí)踐,教你如何使用?functools.partial、functools.wraps、functools.lru_cache?和?functools.reduce,感興趣的可以了解一下

介紹

functools 模塊是 Python 的標(biāo)準(zhǔn)庫(kù)之一,它提供了一系列用于函數(shù)操作的函數(shù)。使用這些函數(shù)可以編寫更簡(jiǎn)潔、更高效的代碼,尤其是在函數(shù)式編程范式中。以下是對(duì) functools 模塊中一些重要功能做的一個(gè)分享

functools 模塊的功能

functools.partial

functools.partial 函數(shù)用于創(chuàng)建一個(gè)新的函數(shù),這個(gè)新函數(shù)是原始函數(shù)的一個(gè)偏應(yīng)用,即固定函數(shù)的一些參數(shù)。

from functools import partial
# 定義一個(gè)函數(shù),需要多個(gè)參數(shù)
def power(base, exponent):
    return base ** exponent
# 使用 functools.partial 創(chuàng)建一個(gè)偏函數(shù),只保留一個(gè)參數(shù)
square = partial(power, exponent=2)
# 調(diào)用偏函數(shù)
print(square(4))  # 輸出: 16

在這里插入圖片描述

functools.wraps

functools.wraps 裝飾器用于保留被包裝函數(shù)的元信息,如文檔字符串、名稱和參數(shù)列表。

from functools import wraps
# 定義一個(gè)函數(shù)
def my_function(a, b):
    """函數(shù)"""
    return a + b
# 使用 functools.wraps 裝飾器包裝一個(gè)函數(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ù)的返回值,這對(duì)于避免重復(fù)計(jì)算昂貴的函數(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ù)用于將一個(gè)二元操作函數(shù)累積地應(yīng)用到一個(gè)序列的所有元素上,從左到右,直到序列結(jié)束。

from functools import reduce
# 定義一個(gè)函數(shù),計(jì)算乘積
def multiply(x, y):
    return x * y
# 使用 reduce 計(jì)算 [1, 2, 3, 4] 的乘積
print(reduce(multiply, [1, 2, 3, 4]))  # 輸出: 24

在這里插入圖片描述

實(shí)例演示

使用 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

在這個(gè)例子中,memoized_factorial 函數(shù)使用 lru_cache 來緩存之前計(jì)算的結(jié)果。這意味著當(dāng)函數(shù)被重復(fù)調(diào)用時(shí),如果之前已經(jīng)計(jì)算過相同參數(shù)的結(jié)果,functools 將返回緩存的結(jié)果,而不是重新計(jì)算。

在這里插入圖片描述

使用 functools.reduce 實(shí)現(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

在這里插入圖片描述

在這個(gè)例子中,定義了一個(gè) average 函數(shù),它將一個(gè)新值加到總和中。然后使用 reduce 函數(shù)來應(yīng)用這個(gè) average 函數(shù)到列表 [1, 2, 3, 4] 上,初始值為 0。這樣就得到了列表的平均值。

functools 模塊為 Python 的函數(shù)式編程提供了許多有用的工具。通過學(xué)習(xí)如何使用 functools.partialfunctools.wraps、functools.lru_cache 和 functools.reduce,可以更加高效地處理函數(shù)和數(shù)據(jù)集合。這些功能不僅可以提高代碼的性能,還可以使代碼更加清晰和易于維護(hù)。

到此這篇關(guān)于Python函數(shù)式編程模塊functools的使用與實(shí)踐的文章就介紹到這了,更多相關(guān)Python functools內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解

    Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解

    Django項(xiàng)目要操作數(shù)據(jù)庫(kù),首先要和數(shù)據(jù)庫(kù)建立連接,才能讓程序中的數(shù)據(jù)和數(shù)據(jù)庫(kù)關(guān)聯(lián)起來進(jìn)行數(shù)據(jù)的增刪改查操作。這篇文章主要介紹了Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python如何處理異常報(bào)錯(cuò)方法(建議收藏!)

    Python如何處理異常報(bào)錯(cuò)方法(建議收藏!)

    開發(fā)程序其實(shí)就像預(yù)測(cè)天氣一樣,即使是代碼的異常錯(cuò)誤,也應(yīng)該能預(yù)測(cè)且被控制,下面這篇文章主要給大家介紹了關(guān)于Python如何處理異常報(bào)錯(cuò)方法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • python搭建微信公眾平臺(tái)

    python搭建微信公眾平臺(tái)

    這篇文章主要介紹了python搭建微信公眾平臺(tái)的相關(guān)資料和技巧,感興趣的朋友可以參考一下
    2016-02-02
  • Python中collections模塊的基本使用教程

    Python中collections模塊的基本使用教程

    collections是Python內(nèi)建的一個(gè)集合模塊,提供了許多有用的集合類。下面這篇文章主要給大家介紹了關(guān)于Python中collections模塊的基本使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-12-12
  • django admin.py 外鍵,反向查詢的實(shí)例

    django admin.py 外鍵,反向查詢的實(shí)例

    今天小編就為大家分享一篇django admin.py 外鍵,反向查詢的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案

    Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案

    這篇文章主要給大家分享了Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案,運(yùn)用 while True: + sleep()、Timeloop 庫(kù)、threading.Timer 、內(nèi)置模塊 sched ,下面就來看看具體的實(shí)現(xiàn)過程吧
    2021-12-12
  • 使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋

    使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋

    這篇文章主要為大家詳細(xì)介紹了如何使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-03-03
  • Python實(shí)現(xiàn)斐波那契數(shù)列的示例代碼

    Python實(shí)現(xiàn)斐波那契數(shù)列的示例代碼

    斐波那契數(shù)列是一種經(jīng)典的數(shù)學(xué)問題,在計(jì)算機(jī)科學(xué)和編程中經(jīng)常被用來演示算法和遞歸的概念,本文將詳細(xì)介紹斐波那契數(shù)列的定義、計(jì)算方法以及如何在Python中實(shí)現(xiàn)它,需要的可以參考下
    2024-01-01
  • python實(shí)現(xiàn)進(jìn)程間通信簡(jiǎn)單實(shí)例

    python實(shí)現(xiàn)進(jìn)程間通信簡(jiǎn)單實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)進(jìn)程間通信簡(jiǎn)單實(shí)例,需要的朋友可以參考下
    2014-07-07
  • python中的編碼和解碼及\x和\u問題

    python中的編碼和解碼及\x和\u問題

    這篇文章主要介紹了python中的編碼和解碼及\x和\u問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論