python高阶函数filter_python 高阶函数之filter
前文說到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。內置常用高階函數就分享到這里啦,更多分享請關注微信公眾號
總結
以上是生活随笔為你收集整理的python高阶函数filter_python 高阶函数之filter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击事件调用匿名函数如何传参_事件发布/
- 下一篇: python的具体功能_python基本