Python高階函數及裝飾器

First Class Object

函數在Python中是一等公民

函數也是對象,可調用的對象

函數可作為普通變量、參數、返回值等

高階函數

數學定義:y=g(f(x))

高階函數需滿足的條件,至少其一

接受一個或多個函數作為參數

輸出一個函數

Python高階函數及裝飾器

Python高階函數及裝飾器

內建函數的高階函數

排序:sorted(iterable[,key][,reverse])

返回一個新列表,對一個可迭代對象的所有元素排序,排序規則為key定義的函數,reverse表示是否翻轉

Python高階函數及裝飾器

數據過濾:filter(function,iterable)

過濾可迭代對象的元素,返回一個迭代器

Function是一個具有參數的函數,返回bool

Python高階函數及裝飾器

映射:map(function,*iterables)

對多個可迭代對象的元素按照指定的函數進行映射,返回一個迭代器

Python高階函數及裝飾器

柯里化Currying

將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。新的函數返回一個以原有第二個參數為參數的函數

z=f(x,y)轉化為z=f(x)(y)

Python高階函數及裝飾器

通過嵌套函數即可將函數轉化成柯里化函數

裝飾器

裝飾器(無參)

是一個函數

函數作為它的形參

返回值也是一個函數

使用@function方式簡化調用

副作用:原函數對象的屬性在使用裝飾器時會被修改

裝飾器和高階函數

裝飾器是高階函數,但裝飾器是對傳入函數的功能的裝飾,即功能的增強

裝飾器函數():

前置功能增強 #被裝飾函數執行前運行

被增強函數

后置功能增強 #被裝飾函數執行后運行

文檔字符串

Documentation Strings

在函數語句塊的第一行,習慣使用多行文本,多使用三引號

慣例首字母大寫,第一行概述,空一行,第三行開始詳細描述

可使用特殊屬性__doc__訪問該文檔

裝飾器(帶參)

是一個函數

函數作為它的形參

返回值是一個不帶參的裝飾器函數

使用@function(形參列表)但是調用

可以看做在裝飾器外層又加了一層函數

Python高階函數及裝飾器

Python高階函數及裝飾器

functools模塊

functools.update_wrapper(wrapper, wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))

類似copy_property

wrapper包裝函數、被更新者、wrapped被包裝函數、數據源

assigned中是要被覆蓋的屬性,模塊名、名稱、限定名、文檔、參數注解

updated中是要被更新的屬性

增加一個__wrapped__屬性,wrapped函數仍然保留

functools.wraps(wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))

類似copy_property

wrapped 被包裝函數

assigned中是要被覆蓋的屬性,模塊名、名稱、限定名、文檔、參數注解

updated中是要被更新的屬性

增加一個__wrapped__屬性,wrapped函數仍然保留

原創文章,作者:ZBD20,如若轉載,請注明出處:http://www.www58058.com/96886

(0)
ZBD20ZBD20
上一篇 2018-04-22
下一篇 2018-04-23

相關推薦

  • python內置數據結構

    python內置數據結構 sort(key=none,resverse=false)—>none 對列表元素進行排序,就地修改。默認升序 resvers為true,反轉,降序 key為一個函數,指定key如何排序 ls.sort(key=functionaame) Print(lst.sort(key=str,reverse=Ture) I…

    Python筆記 2018-03-31
  • 封裝與解構 集合

    封裝和解構 封裝:將多個值進行分割,結合在一起,本質上返回元組,只是省掉了小括號 ‘==‘意思為內容一致,‘=’意思為內存空間一致 解構:把線性結構的元素解開,并順序的賦值給其他變量,左邊接納的變量數要和左邊解開的元素數量一致 集合不是非線性 解構中使用*變量名接收,但不能單獨使用,被*變量名收集后組成一個列表 第一個下劃線為9,結果被第二個下劃線重新賦值為…

    Python筆記 2018-04-01
  • 函數

    函數、參數、參數解構
    返回值、作用域
    遞歸函數
    匿名函數、
    生成器

    2018-04-16
  • Python 部分知識點總結(八)

    此篇博客只是記錄第十周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-05-13
  • 樹 非線性結構,每個元素可有多個前驅和后繼 樹是n(n>=0)個元素的集合,n=0時,稱為空樹,樹只有一個特殊的沒有前驅的元素,稱為樹的根root,樹中除了根結點外,其余元素只能有一個前驅,可以有零個和多個后繼,子樹也有自己的根 結點:樹中的數據元素 結點的度degree:結點擁有的子樹的數目稱為度,記作d(v)。樹的度是樹內各結點的度最大值 葉子結點…

    2018-04-16
欧美性久久久久