zoukankan      html  css  js  c++  java
  • python 函数式编程工具

    有三个内置函数与列表一起使用时非常有用:filter()map()reduce()

    1.

    filter(function, sequence)返回的序列由function(item)结果为真的元素组成。

    如果sequence是一个字符串元组

    结果将是相同的类型;

    否则,

    结果将始终是一个列表

    例如,若要计算一个不能被2和3整除的序列:

    def f(x): return x % 2 != 0 and x % 3 != 0
    ...
    >>> filter(f, range(2, 25))
    [5, 7, 11, 13, 17, 19, 23]


    2.

    map(function, sequence) 为序列中的每一个元素

    调用 function(item) 函数并返回结果的列表。

    例如,计算列表中所有元素的立方值:

    >>>
    >>> def cube(x): return x*x*x
    ...
    >>> map(cube, range(1, 11))
    [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]



    可以传入多个序列;

    此时,

    传入的函数也必须要有和序列数目相同的参数,

    执行时会依次用各序列上对应的元素来调用函数(如果某个序列比另外一个短,就用 None代替)。

    例如:

    >>>
    >>> seq = range(8)
    >>> def add(x, y): return x+y
    ...
    >>> map(add, seq, seq)
    [0, 2, 4, 6, 8, 10, 12, 14]

    3.

    reduce(function, sequence) 只返回一个值,

    它首先以序列的前两个元素调用函数 function,

    然后再以返回的结果和下一个元素继续调用,

    依此执行下去。

    例如,若要计算数字 1 到 10 的总和:

    >>>
    >>> def add(x,y): return x+y
    ...
    >>> reduce(add, range(1, 11))
    55
    

     如果序列中只有一个元素,

    将返回这个元素的值;

    如果序列为空,

    则引发异常。

    可以传入第三个参数作为初始值。

    在这种情况下,

    如果序列为空则返回起始值,

    否则会首先以初始值和序列的第一个元素调用function,

    然后是返回值和下一个元素,

    依此执行下去。

    例如,

    >>>
    >>> def sum(seq):
    ...     def add(x,y): return x+y
    ...     return reduce(add, seq, 0)
    ...
    >>> sum(range(1, 11))
    55
    >>> sum([])
    0

    不要使用示例中定义的sum()
    由于计算数字的总和是一个如此常见的需求,
    Python提供了内置的函数sum(sequence)
    其工作原理和示例几乎一样。
     
  • 相关阅读:
    Css几个兼容性问题
    一些常用的正则表达式
    超链接hover切换效果
    读取根目录src下的指定配置properties文件内容
    SQL Server查询表结构语句
    单独使用ibatis做事物控制。
    ibatis调用存储过程(无返回参数)
    oracle split函数
    Jquery调用Ajax实现联动使用json
    简单分页插件
  • 原文地址:https://www.cnblogs.com/hackerl/p/4783782.html
Copyright © 2011-2022 走看看