zoukankan      html  css  js  c++  java
  • Python基础- 函数式编程

    Python中内置的三个函数与序列一起使用非常有用:filter(), map()和reduce()。

    1.filter(function, sequence)

    filter()的作用是从一个序列中筛出符合条件的元素。

    filter()也接收一个函数和一个序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素。

    例如得到能被3或者5整除的数

    def f(x):
        return x % 3 == 0 or x % 5 == 0
    
    print filter(f, range(2, 25))
    # [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
    

    例如删掉一个序列中的空字符串

    def not_empty(s):
        return s and s.strip()
    
    print filter(not_empty, ['A', 'B', ' ', 'C', None, 'D'])
    # ['A', 'B', 'C', 'D']
    

    2.map(function, sequence)

    map将传入的函数依次作用到序列的每个元素,并把结果返回

    def cube(x): return x*x*x
    
    print map(cube, range(1, 11))
    # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
    
    
    seq = range(8)
    def add(x, y): return x+y
    
    print map(add, seq, seq)
    # [0, 2, 4, 6, 8, 10, 12, 14]
    

    还可以利用,map将一组数字转化为字符串

    list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
    # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    

    3.reduce(function, sequence)

    这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    

     例如,求1到100的和,就可以用reduce实现

    def add(x,y): return x+y
    print reduce(add, range(1, 101))
    # 5050
    

     用这种方式来得到序列的和,如果序列为空时,就会抛出异常。为了避免抛出异常,可以用下面的方式

    def sum(seq):
        def add(x,y): return x+y
        return reduce(add, seq, 0)
    
    print sum(range(1, 11))
    # 55
    print sum([])
    # 0
    
  • 相关阅读:
    [原创]ExtAspNet秘密花园(二) — 一切从头开始
    使用领域定义建模语言来提高生产力
    报表控件团队成立了!!
    常见的程序语言分类的区别(简要说明)
    怎样做一名“专业”的程序员?
    推荐一个计数器网站
    在c中嵌入sql操作PostgreSQL
    让Visual C++ 2005 Express Edition也可以开发windows应用程序
    使用PowerDesigner进行代码生成
    sdmagazine与Dr. Dobb's Journal合并了?
  • 原文地址:https://www.cnblogs.com/wangpfcnblogs/p/6691749.html
Copyright © 2011-2022 走看看