• python内置高阶函数-lambda、zip、map、reduce、filter


    1、 lambda 

      在Python中,lambda函数的函数体有且仅有一条语句,即返回值的表达式语句,它比def简单许多。格式如下:

    返回函数名 = lambda 参数列表:函数返回值表达式语句

      参数列表是可以选择的,如果有多个参数,就用逗号将这些参数隔开。函数返回值的表达式语句不能含有循环、分支、return语句或yield语句,但是允许使用条件表达式。lambda函数的结果是一个匿名函数,当调用lambda函数时,返回的是表达式语句计算所得到的结果。

    例:使用lambda函数计算两个数之和。
    sum = lambda x, y: x + y
    print(sum(1, 2))   

    2、 zip 

      zip函数可以接受一系列可迭代的对象作为参数,调用zip函数时,它按顺序将这一些相对应的元素都变为一个个元组,再返回这些元组所组成的列表。

    例:使用zip函数的实例。
    x = [1, 2]
    y = [3, 4]
    z = [5, 6]
    result= zip(x, y, z)
    for n in result:
        print(n)
    
    运行结果:
    (1, 3, 5)
    (2, 4, 6)
    
    将打包结果解压。
    unzip = zip(*result)
    for n in unzip:
        print(n)
    运行结果:
    (1, 2)
    (3, 4)
    (5, 6)

    3、 map

      map函数和reduce函数类似,都需要接收两个参数:一个映射函数,一个序列。但是map函数的工作原理与reduce函数不同,map函数是对序列中的每一个元素都调用映射函数,最终返回一个新的序列。格式如下:

    最终序列 = map(映射函数,序列1[,序列2…])

      在map函数的参数中,可以存在着多个序列,但序列的个数取决于映射函数的参数个数。

    例:使用map函数的实例。
    list = [1, 2, 3, 4, 5]
    def add(x):
        return x + 1
    result = map(add, list)
    for n in result:
        print(n)
    
    运行结果:
    2
    3
    4
    5
    6

       在上例中,映射函数是add()函数,由于add()函数只有一个参数x,所以map()函数中只能有一个序列参数,即list序列。调用map()函数的时候,将list序列中的所有元素都调用add()函数,计算结果以数组形式返回,然后通过for循环,打印出数组里的所有元素。

    例: 使用map函数对两个序列进行操作的实例。
    list1 = [1, 2, 3];
    list2 = [4, 5, 6];
    def add(x, y):
        return x*100 +y*10;
    result = map(add,list1,list2);
    for n in result:
        print(n);
    
    运行结果:
    140
    250
    360

    4、 reduce

      reduce函数就是将指定的序列中每个元素按一定的规则调用指定函数,最后返回最终结果。格式如下:

    最终结果 = reduce(映射函数,序列)

       要注意,从Python 2.6之后,reduce函数就从内置函数退变成了模块functools中的函数,想要使用reduce函数就必须要引用模块。

    例:使用reduce函数的实例。
    from functools import reduce
    def func(x, y):
        return x + y
    sum = reduce(func, [1, 2, 3, 4, 5])
    print(sum)
    
    运行结果:
    15

       reduce函数的映射函数必须要有两个参数,在上述实例中,func()就是映射函数,用来计算两个数之和。调用reduce(func, [1, 2, 3, 4, 5])的时候,reduce函数将会做下述运算:

      先计算第一个和第二个参数:f(1,2),结果为3;

      再把结果和第三个参数计算:f(3, 3),结果为6;

      再把结果和第四个参数计算:f(6, 4),结果为10;

      再把结果和第五个参数计算:f(10, 5),结果为15;

      因为没有更多的参数了,结束计算,返回结果15。

    5、 filter

      filter函数也和reduce函数类似,都需要接收两个参数,一个映射函数,一个序列。并且filter函数和map函数的工作原理相似,都是对序列中的每一个元素都调用映射函数,且可以存在着多个序列,但序列的个数取决于映射函数的参数个数。不同的是,map函数参数中的映射函数返回的是一个确定的值,而filter函数参数中的映射函数返回布尔值True或False。格式如下:

    filter(映射函数,序列)
    例:使用filter函数的实例。
    def is_odd(x):
        return x % 2 == 1
    result = filter(is_odd, [1, 2, 3, 4, 5, 6])
    for n in result:
        print(n)
    
    运行结果:
    1
    3
    5

      在上例中,映射函数是is_odd()函数,如果参数x是奇数,则返回True,否则返回False。由于is_odd()函数只有一个参数x,所以filter()函数中只能有一个序列参数。调用filter()函数的时候,将序列中的所有元素都调用is_odd()函数,筛选出序列中的所有奇数,计算结果以数组形式返回,然后通过for循环,打印出数组里的所有元素。

  • 相关阅读:
    LVS负载均衡原理详解和使用
    Linux---RPM和YUM
    【Codeforces】CF Round #676 (Div. 2)
    莫队学习笔记
    AtCoder Beginner Contest 187 题解
    【CodeForces】 Educational Codeforces Round 94
    【CodeForces】CF Round 649 (Div.2)
    【CodeForces】CF Round 648 (Div.2)
    【AtCoder】ABC 169
    【题解 LOJ2546「JSOI2018」潜入行动】
  • 原文地址:https://www.cnblogs.com/beyondChan/p/11025987.html
Copyright © 2020-2023  润新知