• 助力函数式编程


    虽然Python中“万般皆下品,唯有对象高”,但函数式编程也不是不能用,而且Python提供了一些有助于进行函数式编程的函数:map、filter和reduce。

    下面简单来看下它们的作用:

    1、map()

    语法:

    map(f,seq)

    参数解析:

      f — 函数

      seq — 序列

    作用:将序列中所有的元素传递给函数。

    这样得到的结果是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list:

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

    2、filter()

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

    例如:在一个数字序列中[1,2,3,4,5,6,7,8,9,10],取出所有偶数,就可以这样写:

    def is_odd(n):
        return n % 2 == 0
    
    list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10]))

    注意filter()的结果也是一个Iterator,故通过list()函数让它把整个序列都计算出来并返回一个list。

    3、reduce()

    函数reduce()是模块functools中的,所以需要导入才能用。

    语法同map()一样,但是reduce()的第一个参数fn函数必须接收两个参数,因为reduce()的作用是使用指定的函数fn将序列的前两个元素合二为一,再将结果与第三个元素合二为一,以此类推,直到处理完整个序列并得到一个结果。

    效果就是:

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

    例如:可以用reduce实现一个求和:

    from functools import reduce
    
    def add(x,y):
        return x + y
    
    reduce(add, [2,4,6,8,10])

    当然就本例而言,完全不如使用内置的sum。

    终日不为以思,无益,不如学也
  • 相关阅读:
    python2和python3的区别
    开发常用命令
    类中的内置方法
    while 循环
    sql执行效率,explain 查询执行效率
    jmeter 中的 HTTP URL Re-writing Modifier
    jmeter beanshell内容
    jmeter 和 ajax
    jdbc 与 each controller 对多条查询结果的处理
    jdbc与 Beanshell PostProcessor 对多条结果的处理
  • 原文地址:https://www.cnblogs.com/lymlike/p/11145900.html
Copyright © 2020-2023  润新知