经过示例介绍Python中的lambda,map,filter 函数的使用方法。python
lambda 操做符(或 lambda函数)一般用来建立小巧的,一次性的匿名函数对象。它的基本语法以下:express
lambda arguments : expression
lambda操做符能够有任意数量的参数,可是它只能有一个表达式,且不能包含任何语句,返回一个能够赋值给任何变量的函数对象。python爬虫
下面经过一个例子来理解一下。首先看看一个Python函数:函数
def add(x, y): return x+y # call the function add(1, 2) # Output: 3
上述函数名为add, 它须要两个参数x和y,并返回它们的和。
接下来,咱们把上面的函数变成一个lambda函数:lua
add = lambda x, y : x + y print(add(1,2)) # Output: 3
在lambda x, y : x + y
中,x和y是函数的参数,x+y
是表达式,它被执行并返回结果。
lambda x, y : x + y
返回的是一个函数对象,它能够被赋值给任何变量。在本例中函数对象被赋值给了add变量。若是咱们查看add的type,能够看到它是一个functionspa
type(add) # Output: function
绝大多数lambda函数做为一个参数传给一个须要函数对象为参数的函数,好比map,reduce,filter等函数。code
map的基本语法以下:对象
map(function_object, iterable1, iterable2, ...)
map函数须要一个函数对象和任意数量的iterables,如list,dictionary等。它为序列中的每一个元素执行function_object,并返回由函数对象修改的元素组成的列表。
示例以下:blog
def add2(x): return x+2 map(add2, [1,2,3,4]) # Output: [3,4,5,6]
在上面的例子中,map对list中的每一个元素1,2,3,4执行add2函数并返回[3,4,5,6]
接着看看如何用map和lambda重写上面的代码:
map(lambda x: x+2, [1,2,3,4]) #Output: [3,4,5,6]
仅仅一行便可搞定!
使用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中的每一个dict做为参数传递给lambda函数。lambda函数表达式做用于每一个dict的结果做为输出。
map函数做用于多个iterables
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函数返回一个惰性计算(lazily evaluated)的迭代器(iterator)或map对象。就像zip函数是惰性计算那样。
咱们不能经过index访问map对象的元素,也不能使用len()获得它的长度。
但咱们能够强制转换map对象为list:
map_output = map(lambda x: x*2, [1, 2, 3, 4]) print(map_output) # Output: map object: list_map_output = list(map_output) print(list_map_output) # Output: [2, 4, 6, 8]
filter的基本语法以下:
filter(function_object, iterable)
filter函数须要两个参数,function_object返回一个布尔值(boolean),对iterable的每个元素调用function_object,filter只返回知足function_object为True的元素。
和map函数同样,filter函数也返回一个list,但与map函数不一样的是,filter函数只能有一个iterable做为输入。
示例:
返回偶数:
a = [1, 2, 3, 4, 5, 6] filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]
过滤dicts的list:
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}] filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]
和map同样,filter函数在Python3中返回一个惰性计算的filter对象或迭代器。咱们不能经过index访问filter对象的元素,也不能使用len()获得它的长度。
list_a = [1, 2, 3, 4, 5] filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object even_num = list(filter_obj) # Converts the filer obj to a list print(even_num) # Output: [2, 4]