Python中lambda用法和filter()函数 | 您所在的位置:网站首页 › splitlines函数python › 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结果: # 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 |
CopyRight 2018-2019 实验室设备网 版权所有 |