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 23:19
下一篇 2018-04-23 02:48

相關推薦

欧美性久久久久