今天的部分介绍了在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
网友评论