python高階函式
變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。
內建高階函式
map() 函式接收兩個引數,乙個是函式,乙個是序列, map 將傳入的函式依次作用到序列的每個元素,並把結果作為新的 list 返回。
reduce 把乙個函式作用在乙個序列[x1, x2, x3...]上,這個函式必須接收兩個引數,reduce 把結果繼續和序列的下乙個元素做累積計算。
filter() 也接收乙個函式和乙個序列。和 map() 不同的時,
filter() 把傳入的函式依次作用於每個元素,然後根據返回值是 true還是 false 決定保留還是丟棄該元素。![](https://pic.w3help.cc/198/9d1dd82e8f6866425807490c15991.jpeg)
• python內建的 sorted() 函式就可以對 list 進行排序;
sorted(iterable, cmp=none, key=none, reverse=false) --> new sorted list
• 排序也是在程式中經常用到的演算法。 無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。通常規定如下:
閉包(closure)
高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。![](https://pic.w3help.cc/633/29ef31ff1bff3e494755d4b7e8e21.jpeg)
f = lazy_sum(1,2,3,4)
#呼叫 lazy_sum() 時,返回的並不是求和結果,而是求和函式。f 實質是 lazy_sum 的返回值, f 實質上是乙個函式名
f()#呼叫函式 f 時,才真正計算求和的結果
•當我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。
•關鍵字 lambda 表示匿名函式,冒號前面的 x 表示函式引數![](https://pic.w3help.cc/f10/47b787051ef00c70b62e0752f9402.jpeg)
• 因為匿名函式沒有名字,不必擔心函式名衝突。 此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式;![](https://pic.w3help.cc/1f0/8c4eeb4865ff8846bee793916ca84.jpeg)
•裝飾器就是用來裝飾函式
• 想要增強原有函式的功能
• 但不希望修改now()函式的定義
• 在**執行期間動態增加功能的方式
•定義的裝飾器實質是返回函式的高階函式
裝飾器的功能,比如:許可權的驗證,日誌記錄, 函式執行時間統計, 執行函式前預備處理, 執行函式後清理
功能等;![](https://pic.w3help.cc/e5c/0b9acdad1e41a1dccd9fbeac85307.jpeg)
被裝飾的函式有引數
必選引數
預設引數
可變引數(注意: 盡量使用,通用性比較強)
關鍵字引數![](https://pic.w3help.cc/1f8/d7a1817fdf750b4b20bab1afced33.jpeg)
www python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式 高階函式
filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...