First Class Object
函數在Python中是一等公民
函數也是對象,可調用的對象
函數可作為普通變量、參數、返回值等
高階函數
數學定義:y=g(f(x))
高階函數需滿足的條件,至少其一
接受一個或多個函數作為參數
輸出一個函數
內建函數的高階函數
排序:sorted(iterable[,key][,reverse])
返回一個新列表,對一個可迭代對象的所有元素排序,排序規則為key定義的函數,reverse表示是否翻轉
數據過濾:filter(function,iterable)
過濾可迭代對象的元素,返回一個迭代器
Function是一個具有參數的函數,返回bool
映射:map(function,*iterables)
對多個可迭代對象的元素按照指定的函數進行映射,返回一個迭代器
柯里化Currying
將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。新的函數返回一個以原有第二個參數為參數的函數
z=f(x,y)轉化為z=f(x)(y)
通過嵌套函數即可將函數轉化成柯里化函數
裝飾器
裝飾器(無參)
是一個函數
函數作為它的形參
返回值也是一個函數
使用@function方式簡化調用
副作用:原函數對象的屬性在使用裝飾器時會被修改
裝飾器和高階函數
裝飾器是高階函數,但裝飾器是對傳入函數的功能的裝飾,即功能的增強
裝飾器函數():
前置功能增強 #被裝飾函數執行前運行
被增強函數
后置功能增強 #被裝飾函數執行后運行
文檔字符串
Documentation Strings
在函數語句塊的第一行,習慣使用多行文本,多使用三引號
慣例首字母大寫,第一行概述,空一行,第三行開始詳細描述
可使用特殊屬性__doc__訪問該文檔
裝飾器(帶參)
是一個函數
函數作為它的形參
返回值是一個不帶參的裝飾器函數
使用@function(形參列表)但是調用
可以看做在裝飾器外層又加了一層函數
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