• python的高阶函数


    函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

    高阶函数

    定义:一个函数就可以接收另一函数作为参数,这种函数就称之为高阶函数。

    map/reduce

    Python内建了map()和reduce()函数。
    1.map()函数
    map()函数接受两个参数,一个是函数,一个是Iterable(可迭代对象),map将传入的函数依次作用到序列的每一个元素上,然后将结果作为新的Iterator返回。

    def f(x):
        return x*x
    
    r = map(f,[1,2,3,4,5,6]);
    list(r)
    //由于结果是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
    
    list(map,(str,[1,2,3,4,5,6]))
    //['1','2','3','4','5','6']
    

    2.reduce()函数
    作用在一个序列上[x1,x2,x3,...],这个函数必须接受两个参数,reduce将结果继续和序列的下一个元素做累积计算。

    reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4);
    from functools import reduce
    def add(x,y):
        return x+y
    reduce(add,[1,3,5,7,9])
    //25
    

    当然要求和的话,也可以直接用python内建函数sum(),没有必要动用reduce。
    比如要将序列[1,3,5,7,9]变换成整数13579,reduce可以派上用场

    from functools import reduce
    def fn(x,y):
        return x*10 + y
    
    reduce(fn,[1,3,5,7,9])
    //13579
    

    还可以结合使用map和reduce方法将一个数字字符串变成一个数字。

    from functools import reduce
    
    def str2int(s):
        def fn(x,y):
            return x*10 + y
        def char2num(s):
            return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
        return reduce(fn,map(char2num,s))
    

    filter()函数

    主要是用来过滤序列。
    和map()相似,filter()也接收一个函数和一个序列。和map不同的是,filter会把函数作用于每个元素,然后根据返回值是true还是false来决定保留还是丢弃该元素。
    注意到filter()函数返回的也是一个Iterator,也就是一个惰性序列,所以也要用list()函数获得所有结果并返回list。

    sorted()函数

    1.python内置的sorted函数就可以对list进行排序。

    sorted([1,5,6,78,0])
    

    还可以实现自定义排序

    sorted([36,-5,45,12],key = abs)
    //-5,12,36,45
    

    key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

    2.还可以对字符串进行排序

    sorted(['bob', 'about', 'Zoo', 'Credit'])
    ['Credit', 'Zoo', 'about', 'bob']
    

    默认下,对字符串排序,是按照ASCII的大小比较的,当然也可以像上面一样自定义排序方法,在后面加上一个key函数。

    sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']
    

    3.要进行反向排序的话,就要传入第三个参数reverse=True

    sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
    ['Zoo', 'Credit', 'bob', 'about']
    
  • 相关阅读:
    mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
    Asan检测内存读越界
    C 实现 C++ 的面向对象特性(封装、继承、多态)
    VIBE算法
    Go 大坑 nil
    求二叉树中节点的最大距离
    计算[1,N]范围内含有7的数字的个数
    一组便于创建线程和线程池的简单封装函数
    用C#执行doc命令
    可以自由停靠的窗体!
  • 原文地址:https://www.cnblogs.com/sminocence/p/7899785.html
Copyright © 2020-2023  润新知