今天的部分介紹了在Python中使用lambda,map和filter函數。我們將介紹每個的基本語法,並通過一些示例來熟悉使用它們。讓我們開始吧!
*** Lambda***
lambda運算符或lambda函數用於在Python中創建小型的、一次性的匿名函數對象
基本語法
lambda arguments : expression
lambda運算符可以有任意數量的參數,但只能有一個表達式。它不能包含任何語句,並返回一個可以分配給任何變量的函數對象。
例子
我們來看看Python中的一個函數:
def add(x, y):
return x + y
# Call the function
add(2, 3) # Output: 5
上面的函數名是add它需要兩個參數x和y並返回它們的和。
讓我們看看如何將上述函數轉換為lambda函數:
add = lambda x, y : x + y
print add(2, 3) # Output: 5
在***lambda x中,y:x + y; *x和y是函數的參數,x + y是執行的表達式,其值作為輸出返回。
lambda x,y:x + y返回一個可以賦值給任何變量的函數對象,在這種情況下,函數對象被賦值給* add*變量。
type (add) # Output: function
如果我們檢查add的類型,它就是一個函數。
最重要的是,lambda函數作為參數傳遞給一個函數,該函數需要一個函數對象作為參數,如map,reduce和filter函數。
map
基本語法
map(function_object, iterable1, iterable2,...)
map函數需要一個函數對象和任意數量的iterables,例如list,dictionary等。它為序列中的每個元素執行function_object,並返回由函數對象修改的元素列表。
例子
def multiply2(x):
return x * 2
map(multiply2, [1, 2, 3, 4]) # Output [2, 4, 6, 8]
在上面的例子中,map對列表中的每個元素[1,2,3,4] 執行multiply2函數,並返回[2,4,6,8]。
讓我們看看如何使用map和lambda編寫上面的代碼。
map(lambda x : x*2, [1, 2, 3, 4]) #Output [2, 4, 6, 8]
只需一行代碼!
使用Map和Lambda迭代Dictionary
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
map(lambda x : x['name'], dict_a) # Output: ['python', 'java']
map(lambda x : x['points']*10, dict_a) # Output: [100, 80]
map(lambda x : x['name'] == "python", dict_a) # Output: [True, False]
在上面的例子中,每個字典的dict_a將作為參數傳遞給傳遞lambda功能。每個dict的lambda函數表達式的結果將作為輸出給出。
多個iterable Map函數
我們可以將多個序列傳遞給map函數,如下所示:
list_a = [1, 2, 3]
list_b = [10, 20, 30]
map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]
這裡,list_a和list_b的每個第i個元素將作為參數傳遞給lambda函數。
在Python3中,map函數返回一個* iterator或map對象*,它被延遲地計算,類似於zip函數的計算方式。在zip函數文章中更詳細地解釋了延遲求值。
我們不能用索引訪問map對象的元素,也不能*len()*用來查找map對象的長度。
但是,我們可以強制將map輸出(即map對象)轉換為列表,如下所示:
map_output = map(lambda x: x*2, [1, 2, 3, 4])
print(map_output) # Output: map object: <map object at 0x04D6BAB0>
list_map_output = list(map_output)
print(list_map_output) # Output: [2, 4, 6, 8]
Filter
基本語法
filter(function_object, iterable)
該函數需要兩個參數:和一個可迭代的。返回一個布爾值,併為iterable的每個元素調用。只有過濾器返回這些元素為其回報。*filter*``*function_object*``*function_object*``function_object``*true*
與*map*函數一樣,filter函數也返回元素列表。與此不同*map*,該*filter*函數只能有一個可迭代的輸入。
例子
偶數使用過濾功能:
a = [1, 2, 3, 4, 5, 6]
filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]
過濾詞典列表:
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]
類似於*map*,Python3中的過濾器函數返回一個過濾器對象或延遲評估的迭代器。我們不能用索引訪問過濾器對象的元素,也不能*len()*用來查找過濾器對象的長度。
list_a = [1, 2, 3, 4, 5]
filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object <filter at 0x4e45890>
even_num = list(filter_obj) # Converts the filer obj to a list
print(even_num) # Output: [2, 4]
翻譯自:https://medium.com/better-programming/lambda-map-and-filter-in-python-4935f248593