【基礎09】【自學筆記】python匿名函式和必學高階函式
阿新 • • 發佈:2021-12-22
一、匿名函式的使用
匿名函式(英語:anonymous function)是指一類無需定義識別符號(函式名)的函式。通俗來說呢,就是它可以讓我們的函式,可以不需要函式名
這邊使用def
和lambda
分別舉個例子,你很快就能理解
def mySum(x, y): return x+y mySum(2, 3) # 5 (lambda x, y: x+y)(2, 4) # 6
可以看到匿名函式直接執行,省下了很多行的程式碼
帶 if/else
>>>( lambda x, y: x if x < y else y )( 1, 2 )
遞迴函式
>>> func = lambda n:1 if n == 0 else n * func(n-1) >>> func(5) 120
>>> a = lambda *z:z #*z返回的是一個元祖 >>> a('Testing1','Testing2') ('Testing1', 'Testing2')
>>> c = lambda **Arg: Arg #arg返回的是一個字典 >>> c() {}
二、必學高階函式
1. map 函式
map 函式,它接收兩個引數,第一個引數是一個函式物件(當然也可以是一個lambda表示式),第二個引數是一個序列。
>>>list(map(lambda x: x*2, [1,2,3,4,5])) [2, 4, 6, 8, 10]
可以很清楚地看到,它可以將後面序列中的每一個元素做為引數傳入lambda中
不使用 map 函式寫法
mylist=[] for i in [1,2,3,4,5]: mylist.append(i*2)
2.filter 函式
filter 函式,和 map 函式相似。同樣也是接收兩個引數,一個lambda 表示式,一個序列。它會遍歷後面序列中每一個元素,並將其做為引數傳入lambda表示式中,當表示式返回 True,則元素會被保留下來,當表示式返回 False ,則元素會被丟棄。
下面這個例子,將過濾出一個列表中小於0的元素。
>>>filter(lambda x: x < 0, range(-5, 5))
[-5, -4, -3, -2, -1]
3. reduce 函式
reduce 函式,也是類似的。它的作用是先對序列中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 lambda 函式運算,將其得到的結果再與第四個元素進行運算,以此類推下去直到後面沒有元素了。
這邊舉個例子你也就明白了。
>>>reduce(lambda x,y: x+y, [1,2,3,4,5]) 15
它的運算過程分解一下是這樣的。
1+2=3 3+3=6 6+4+10 10+5=15
總結一下:
第一點,map 和 filter 函式返回的都不再是一個列表,而是一個迭代器物件。這裡以map為例
>>> map_obj = map(lambda x: x*2, [1,2,3,4,5]) >>> from collections.abc import Iterator >>> isinstance(map_obj, Iterator) True >>> next(map_obj) 2 >>> list(map_obj) [4, 6, 8, 10]
第二點,reduce 不可以直接呼叫,而是要先匯入才能使用,
from functools import reduce
奔跑的蝸牛