前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter。
先看一下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 来决定是否保留该元素,达到过滤的效果。
下面举例说明:
从一个list文件列表中筛选出已 .py 结尾的文件,文件列表如下:
files = ["report.py","log.txt", "logger.py",
"config.txt", "main.py"]
首先定义一个函数,其功能是根据传入的文件判断
>>> 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 循环进行判断了。
第一个参数传入 is_python_file 函数对象
第二个参数传入 序列 files列表
多说一句,有的小伙伴对传入的参数函数对象(没加括号)可能有疑惑,如果函数加(),表示函数执行的结果传入 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。内置常用高阶函数就分享到这里啦,更多分享请关注微信公众号