前文说到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。内置经常使用高阶函数就分享到这里啦,更多分享请关注微信公众号