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

  • 相关阅读:
    扩展性很好的一个分页存储过程
    SQL中列转行
    Server.MapPath() 方法(摘自互联网)
    容易遗忘のSQL
    Linq读取XML
    字节流和字符流
    Java中" "和 ' '
    Spring常用基本注解
    finally和return
    JS 深度clone
  • 原文地址:https://www.cnblogs.com/yaoqingzhuan/p/10946161.html
Copyright © 2020-2023  润新知