Python學習之高階函式與lambda表示式

2021-07-31 03:10:40 字數 2552 閱讀 2440

學習python

有所幫助。

python語法簡單一看就會,但用在實處,想因為少於實戰,總感覺有些捉襟。

翻閱跟蹤youtube_dl原始碼,看到filter()函式用法,及其中lambda表示式,感覺好有意思,就補下課,記錄所思。

1. 高階函式

所謂高階函式,即是能接受函式做引數的函式。函式做參,與c#委託、c++函式指標、delphi事件有類似之處

比如:def my_func(f, *args):

f(args)

def my_print(s):

print ', '.join(s)

my_func(my_print, 'liujw', 'male')

它列印出:

liujw, male

如此定義函式,它能接受函式做引數,並能處理其它引數,我們就說它高階函式。

2. lambda表示式

lambda表示式返回可呼叫的函式物件,並且在執行時返回它們,通常是在需要乙個函式,但是又不想去命名乙個函式的場合下使用。

比如,我們定義數相加函式:

def add(x, y):

return x + y

它用lambda表示式表示為:

lambda x, y: x + y

它以乙個表示式,替代了常規def方法中return語句。

lambda可以支援0至多個引數,但沒見有支援可變引數,即*args、**args,應該是不支援。

3. 內建高階函式

用可選的引數來呼叫func,nkw 為非關鍵字引數,kw 關鍵字引數;返回值是函式呼叫的返回值。 此函式已於python 1.6中擯棄

用途:當乙個函式的引數存在於乙個元組或者乙個字典中時,用來間接的呼叫這個函式。現在版本python已允許直接呼叫作為引數的函式,因此它已淡出

def my_fun1():

print "my_fun"

def my_fun2(x, y):

print x + y

輸出為:

my_fun8

3.2 filter(func, seq):

呼叫乙個布林函式func 來迭代遍歷每個seq 中的元素, 返回乙個使func 返回值為ture 的元素的序列。

這個好用,我就是看到它才複習其用法,並成此文的。而youtube_dl中,大量用作為字典類判斷,諸如:

matches = list(filter(lambda f: f['ext'] == ext, formats))

比如下面**,求陣列中的偶數:

lst = [1, 2, 3, 6, 7, 9, 10, 12, 15, 18]

lst = filter(lambda x: x % 2 == 0, lst)

print lst

它返回為:

[2, 6, 10, 12, 18]

3.3 map(func, seq1[,seq2...])

將函式func 作用於給定序列(s)的每個元素,並用乙個列表來提供返回值,如果func 為none,func 表現為乙個身份函式,返回乙個含有每個序列中元素集合的n 個元組的列表。

比如上面列表元素做翻倍如處,可寫**如此:

lst = [1, 2, 3, 6, 7, 9, 10, 12, 15, 18]

lst = map(lambda x: x + x, lst)

print lst

返回結果為:

[2, 4, 6, 12, 14, 18, 20, 24, 30, 36]

3.4 reduce(func, seq[, init]):

將二元函式作用於seq 序列的元素,每次攜帶一對(先前的結果以及下乙個序列元素),連續的將現有的結果和下雨給值作用在獲得的隨後的結果上,最後減少我們的序列為乙個單一的返回值;如果初始值init 給定,第乙個比較會是init 和第乙個序列元素而不是序列的頭兩個元素。

python核心程式設計pdf版翻譯令人蛋疼,什麼是 下雨給值作用在?

簡方之就是返回func對後所面引數執行結果,通常用在數學計算上,當然其用處不止如此。

比如求上面列表所有元素之和,可寫**如下:

lst = [1, 2, 3, 6, 7, 9, 10, 12, 15, 18]

result = reduce(lambda x, y: x + y, lst)

print result

其結果為:

3.5 sorted(iterable, cmp=none, key=none, reverse=false):

顧名思義,它是用來排序的。接受乙個傳入引數,其它可選引數為排序規則、排序key值、是否反轉等。

如果cmp為空,則預設公升序排列列表,cmp返回值決定排序方式,>0為公升序,=0不變,<0降序,cmp須得有兩個引數。

比如降序排列如下列表:

lst = [1, 7, 5, 2, 3, 6, 9]

lst = sorted(lst, lambda x, y: y - x)

print lst

結果為:

[9, 7, 6, 5, 3, 2, 1]

其為氣泡排序法,x為後面元素,y為前面元素。若公升序排列,置x - y為結果即可。

python高階學習之高階函式

高階函式就是把函式當做引數傳遞的一種函式,例如 執行結果 map 接收乙個函式 f和乙個list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。執行結果 reduce 函式接收的引數和 map 類似,乙個函式 f,乙個list,但行為和 map 不同,redu...

python學習之高階函式

本文中所指的高階函式,是可以接收函式作為引數傳入或者將函式作為返回值,這就是函式式程式設計,是一種高度抽象的程式設計正規化。常見的內建高階函式包括 map,reduce,filter,sorted,用法下面以sorted舉例。sorted 1 33 2 key int 返回 1 2 33 其餘內建函...

Python之高階函式

一 什麼是高階函式 函式作為實參傳遞給函式的或者函式名為返回值的函式稱為高階函式。1 實參傳遞給函式 2 函式名為返回值 二 系統內建的高階函式 1 map函式 至少需要兩個引數,第乙個引數是函式名,第二個引數是序列 str,list,tuple map功能 把序列中的每乙個元素作為引數,傳給函式進...