Python中lambda用法和filter()函数

版权声明:本文为博主原创文章,欢迎大家转载,但是要注明我的文章地址。 https://blog.csdn.net/program_developer/article/details/82024468

                                         “微信公众号”

                      

目录

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

【2】http://www.runoob.com/python/python-func-filter.html

【3】http://www.runoob.com/python/python-functions.html

猜你喜欢

转载自blog.csdn.net/program_developer/article/details/82024468