python 高阶函数之filter

前文说到python高阶函数之map,相信你们对python中的高阶函数有所了解,这次继续分享python中的另外一个高阶函数filter。python

先看一下filter() 函数签名微信

>>> help(filter)
Help on class filter in module builtins:

class filter(object)
 |  filter(function or None, iterable) --> filter object
 |
 |  Return an iterator yielding those items of iterable for which function(item)
 |  is true. If function is None, return the items that are true.

和map()函数相似,filter()也是接收一个函数和一个序列做为参数,和map() 不一样的是,filter把传入的函数依次做用于序列中的每个元素,并根据其返回值是True 仍是 False 来决定是否保留该元素,达到过滤的效果。函数

 

下面举例说明:ui

从一个list文件列表中筛选出已 .py 结尾的文件,文件列表以下:spa

files = ["report.py","log.txt", "logger.py",
"config.txt", "main.py"]

 

首先定义一个函数,其功能是根据传入的文件判断code

>>> def is_python_file(file_name):
...     if file_name.endswith(".py"):
...             return True
...     else:
...             return False
...

 

应用filter函数对象

>>> list(filter(is_python_file, files))
['report.py', 'logger.py', 'main.py']

以上就达到了筛选的功能,很牛吧,不用本身再写一个 for 循环进行判断了。
it

第一个参数传入 is_python_file 函数对象io

第二个参数传入 序列 files列表function

多说一句,有的小伙伴对传入的参数函数对象(没加括号)可能有疑惑,若是函数加(),表示函数执行的结果传入 filter

 

若是感受定义一个简单的函数麻烦,咱们可使用匿名函数lambda

lambda f:f.endswith(".py")

>>> list(filter(lambda f:f.endswith(".py"), files))
['report.py', 'logger.py', 'main.py']

 

其实还可使用列表推导式

>>> [ f for f in files if f.endswith(".py") ]
['report.py', 'logger.py', 'main.py']

 

python中其余的高阶函数使用方式也是相似的,好比sorted、reduce、reversed。内置经常使用高阶函数就分享到这里啦,更多分享请关注微信公众号

相关文章
相关标签/搜索