Python中lambda用法和filter()函数
“微信公众号”
目录
1. lambda用法。
2. filter()用法。
1. lambda用法。
Python使用lambda来创建匿名函数。
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
举个例子:
func=lambda x:x+2
print(func(1))
#3
print(func(2))
#4
#以上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结果:<filter object at 0x00000184ED881358>
# 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]
上面例子中的filter()的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实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),是比lambda的方式更容易理解。
Reference:
【1】https://www.cnblogs.com/AlwaysWIN/p/6202320.html
赞 (0)