Python基礎 lambda與filter用法

2021-09-24 19:09:52 字數 1514 閱讀 3880

1. lambda用法。

python使用lambda來建立匿名函式。

lambda只是乙個表示式,函式體比def簡單很多。

lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

lambda函式擁有自己的命名空間,且不能訪問自有引數列表之外或全域性命名空間裡的引數。

雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧記憶體從而增加執行效率。

舉個例子:

func=lambda x:x+2

print(func(1))

print(func(2))

#以上lambda等同於以下函式

def func(x):

return(x+2)

可以這樣理解:lambda作為乙個表示式,定義了乙個匿名函式。上例中**x為函式入口引數,x+2為函式體。用lambda寫法,簡化了函式定義的書寫形式,使**更為簡潔。

在python中,還有幾個定義好的全域性函式:filter()、map()、reduce()。這些全域性函式可以和lambda配合使用。

2. filter()用法。

filter(函式,序列)函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該函式接收兩個引數,第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判斷,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。

注意:python2.7返回的是列表,python3.x返回的是迭代器物件。

舉例子:

def is_odd(n):

return n%2==1

newlist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])

print(newlist)

python3.6結果:python2.x結果:[1, 3, 5, 7, 9]

python3.6返回的是迭代器物件,可以轉換成list

print(list(newlist))

[1, 3, 5, 7, 9]

以上函式可以用lambda表示式書寫

newlist = list(filter(lambda n:n%2==1,[1,2,3,4,5,6,7,8,9,10]))

print(newlist)

[1, 3, 5, 7, 9]

在物件遍歷處理方面,其實python的for…in…if語法已經很強大,並且在易讀上勝過了lambda。

以上函式還可以寫成如下:

newlist = list(x for x in [1,2,3,4,5,6,7,8,9,10] if x%2==1)

print(newlist)

[1, 3, 5, 7, 9]

詳見:

Python基礎05 函式與lambda表示式

函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。1 定義乙個函式 定義函式的規則 語法 def functionname parameters 函式 文件字串 function suite return expression 例項 呼叫 def sum x,y z x y retur...

Python基礎 05 函式與Lambda表示式

匿名函式lambda表示式 定義函式 呼叫函式 有必須引數 關鍵字引數 不定長引數 引數型別 必須引數 呼叫時引數數量型別必須和宣告時一樣 defprintme str 列印任何傳入的字串 print str printme str 如果此處不加引數的話會報錯 關鍵字引數 呼叫時引數順序可以與宣告時...

Python基礎學習篇 lambda

python lambda是在python中使用lambda來建立匿名函式,而用def建立的方法是有名稱的,除了從表面上的方法名不一樣外,python lambda還有哪些和def不一樣呢?1 python lambda會建立乙個函式物件,但不會把這個函式物件賦給乙個識別符號,而def則會把函式物件...