最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python編程functools模塊創(chuàng)建修改的高階函數解析

 更新時間:2021年09月13日 15:59:36   作者:夢想橡皮擦  
本篇文章主要為大家介紹functools模塊中用于創(chuàng)建、修改函數的高階函數,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

partial 函數

partial 為偏函數(有的地方也叫做部分應用函數),它是對函數的二次封裝,將現有函數的部分參數提前綁定為指定值,然后再進行計算。

由于偏函數的可變參數少,因此函數調用的難度低。

直接展示代碼:

from functools import partial
# 原函數聲明
def show(name, level):
    print("name:", name, "level:", level)
# 定義偏函數,封裝 show() 函數,并為 name 參數設置了默認參數
show_level = partial(show, name='橡皮擦')
# 由于 name 參數已經有默認值,調用偏函數時,name 可以不指定
show_level(level="9級")

上述代碼就是使用 partial 函數,將一個函數的某些參數(案例中是 name)進行了固定(相當于提供了默認值),然后再返回一個新的函數,新函數參數也進行了減少。

還有一點是上述代碼在調用 show_level 函數時,必須使用關鍵字參數形式給 level 進行傳值,否則會出現 TypeError 錯誤,如下所示:

# 代碼寫成下述內容
show_level("9級")
# 異常如下
TypeError: show() got multiple values for argument 'name'

偏函數也可以通過匿名函數實現,例如下述代碼:

# 代碼寫成下述內容
show_level("9級")
# 異常如下
TypeError: show() got multiple values for argument 'name'

使用 timeit 運行 10 萬次,測試一下二者的時間基本沒有太大差異,所以可以互通使用,不過匿名函數還是實現一些相對簡單的函數。

裝飾器 @lru_cache

給函數添加 @lru_cache 裝飾器,可以加快函數的運行,lru 指最近使用的計算結果會保留在緩存中。

該裝飾器的原型如下:

@functools.lru_cache(maxsize=None, typed=False)

maxsize:最多緩存的次數,如果為 None,則無限制,設置為 2n 時,性能最佳;

typed:如果設置為 True(注意,在 functools32 中沒有此參數),則不同參數類型的調用將分別緩存,例如 f(3) 和 f(3.0)。

接下來通過菲波那切數列的遞歸展示有無 lru_cache 的區(qū)別。

from functools import lru_cache
import timeit
@lru_cache()
def factorial(n):
    return 1 if n <= 1 else n * factorial(n - 1)
a = timeit.timeit(stmt="factorial(20)", setup='from __main__ import factorial', number=100000)
print(a)
  • 不帶 lru_cache 耗時:0.2;
  • 帶 耗時:0.06

差異明顯,這是因為每次執(zhí)行 factorial 時,都會檢查由裝飾器維護的緩存池,如果值存在,直接獲取對應的結果,避免重復計算。

一般的結論是,對于需要重復計算同一組值的應用,使用裝飾器 @lru_cache 可以大幅度提升性能。

reduce 函數

reduce 函數也是高階函數,它可以將可迭代對象中相鄰的兩個值通過指定函數結合在一起,因此 sum,len,max,min 都可以看做是 reduce 函數的特殊形式。

reduce 函數的定義:

reduce(function, sequence [, initial] ) -> value

function參數:是一個有兩個參數的函數,reduce 依次從 sequence 中取一個元素,和上一次調用 function 的結果做參數再次調用 function。

如果第一次沒有指定 initial,則默認使用 sequence 的第一個元素與下一個元素一同傳入二元 function 函數中去執(zhí)行。

讀起來有點繞,直接看案例即可。

from functools import reduce
def add(x, y):
    return x + y
a = reduce(add, [1, 2, 3, 4])
print(a)

initial 參數表示初始值,默認情況下是使用序列的第一個值。

from functools import reduce
a = reduce(lambda x, y: x + y, [1, 2, 3, 4], 2)
print(a)

下面為大家展示如何使用 reduce 實現 sumlen 等函數。

from functools import reduce
data = [1, 2, 3, 4]
sum = lambda data: reduce(lambda x, y: x + y, data, 0)
count = lambda data: reduce(lambda x, y: x + 1, data, 0)
min = lambda data: reduce(lambda x, y: x if x < y else y, data)
a = sum(data)
b = count(data)
c = min(data)
print(a, b, c)

還可以使用 reduce 函數與 partical 函數實現 sum 函數,代碼如下:

from functools import reduce, partial
data = [1, 2, 3, 4]
sum = partial(reduce, lambda x, y: x + y)
a = sum(data)
print(a)

以上就是Python編程functools模塊中創(chuàng)建修改函數的高階函數解析的詳細內容,更多關于Python編程functools模塊創(chuàng)建修改的高階函數的資料請關注腳本之家其它相關文章!

相關文章

  • 關于Python中浮點數精度處理的技巧總結

    關于Python中浮點數精度處理的技巧總結

    雙精度浮點數(double)是計算機使用的一種數據類型,使用 64 位(8字節(jié)) 來存儲一個浮點數。下面這篇文章主要給大家總結介紹了關于Python中浮點數精度處理的技巧,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • python批量設置多個Excel文件頁眉頁腳的腳本

    python批量設置多個Excel文件頁眉頁腳的腳本

    這篇文章主要介紹了python批量設置多個Excel文件頁眉頁腳的源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python 文件與目錄操作

    python 文件與目錄操作

    可以使用簡單的方法匹配某個目錄下的所有子目錄或文件,用法也很簡單。
    2008-12-12
  • Python實現高效提取Word文檔的特定頁

    Python實現高效提取Word文檔的特定頁

    在日常做?Python?辦公自動化時,處理?Word?文檔往往不只是讀取文本內容,很多時候,我們真正需要的是像處理?PDF?一樣去操作?Word?文檔,下面我們就來看看如何使用Python提取Word文檔的特定頁面吧
    2026-04-04
  • pycharm使用docker容器開發(fā)的詳細教程

    pycharm使用docker容器開發(fā)的詳細教程

    這篇文章主要介紹了pycharm使用docker容器開發(fā)的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • Python 支持向量機分類器的實現

    Python 支持向量機分類器的實現

    這篇文章主要介紹了Python 支持向量機分類器的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 以Flask為例講解Python的框架的使用方法

    以Flask為例講解Python的框架的使用方法

    這篇文章主要介紹了Python的框架的使用方法,文中以Flask框架的安裝為例進行講解,代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python以簡單方式定義上下文管理器的實戰(zhàn)指南

    Python以簡單方式定義上下文管理器的實戰(zhàn)指南

    合理使用上下文管理器可以減少40%以上的資源泄漏問題,并顯著提高代碼的可讀性,本文將深入探討如何以簡單方式定義和使用上下文管理器,從基礎概念到高級技巧,希望對大家有所幫助
    2025-11-11
  • 七種Python代碼審查工具推薦

    七種Python代碼審查工具推薦

    這篇文章主要介紹了七種Python代碼審查工具推薦,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • Flask的url_for和request.url如何進行URL判斷

    Flask的url_for和request.url如何進行URL判斷

    這篇文章主要介紹了Flask的url_for和request.url如何進行URL判斷問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

上思县| 长海县| 格尔木市| 龙州县| 辽宁省| 西盟| 广州市| 潮安县| 沈丘县| 浑源县| 寿宁县| 虞城县| 灌南县| 顺平县| 北辰区| 共和县| 内乡县| 黄石市| 上饶市| 普格县| 兴业县| 绥德县| 镶黄旗| 灵宝市| 林口县| 武义县| 望都县| 镇巴县| 嘉定区| 庆安县| 日喀则市| 炉霍县| 岳阳县| 太白县| 新津县| 连江县| 北宁市| 慈利县| 唐海县| 石棉县| 伊通|