zoukankan      html  css  js  c++  java
  • 匿名函数、高阶函数、map函数、filter函数、reduce函数

    1.匿名函数

        例如: lambda x: x+1

        此为匿名函数 x为形参,x+1为函数表达式 (此处表达式逻辑不能过于复杂,条件语句等不能使用;可以定义多个形参 如 lambda x,y,z:x+y+z;

        匿名函数也可返回多个值,但需要加括号  如 lambda  x,y,z: (x+1,y+1,z+1)

      (1)匿名函数的调用

    func = lambda x:x+1    赋名
    
    a=func(10)        调用
    print(a)         打印
    运行结果:
    11

      

    2.高阶函数 : 函数接受的参数是一个函数名  或者   返回值中包含函数

    def bar():
        print('from bar')
        
    def foo():          foo() 为高阶函数
        print('from foo')
        return bar()      此处运行bar() 并得到其返回值,并返回

    print(foo())
    运行结果:

    from foo
    from bar

    None              因为bar()没有返回值,所以此处为None

     3.map函数  map(x,y) 两个形参,第一个为处理方法,第二个为一个可迭代对象。map函数将可迭代对象中的每一个值运for循环遍历,并把每个值交给前边形参所提供的处理方法进行处理并返回值

               最终得到的是与原来相似的处理后的对象(元素个数及位置与原来的一样)   

    num_l = [1,2,10,5,3,7]
    def map_test(func,array):
        ret=[]
        for i in array:
            res=func(i)
            ret.append(res)
        return ret
    
    print(map_test(lambda x:x+1,num_l))                传入一个匿名函数(也可以自己再定义一个函数),传入一个处理对象
    print('内置函数map,处理结果:',map(lambda x:x+1,num_l))
    运行结果:

    [2, 3, 11, 6, 4, 8]
    内置函数map,处理结果: <map object at 0x00000272B81276D8>    有此处可以得知,map函数与map_test()作用一样,但写起来更为简便,但其得到的结果为一个内存地址(可迭代对象),可通过

                                         print(list(map(lambda x:x+1,num_l))) 来得到与 map_test() 相同过的效果

    4.filter函数 filter(x,y) 第一个形参为函数,第二个形参为可迭代对象,filter函数将第二个形参中的值遍历给第一个形参传入的函数处理,函数返回布尔值 True 或者False,并保留True的值

    movie_people = ['alex_sb','qupeiqi_sb','linhaifeng','yuanhao_sb']
    def filter_test(func,array):
        tet=[]
        for i in array:
            if not func(i):
                tet.append(i)
        return tet
    
    print(filter_test(lambda n :n.endswith('sb'),movie_people))
    print(filter(lambda n:not n.endswith('sb'),movie_people))
    print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
    运行结果:

    ['linhaifeng'] 

    <filter object at 0x00000283CFE07828>                          可知,filter()函数和自定义的filter_test()函数作用相同,其返回值也是内存地址。

    ['linhaifeng']                                       

    5.reduce函数    reduce(x,y,z=None) 第一个形参传入函数,第二个形参传入处理的对象,第三个默认为None。将第二个形参中的值遍历传入函数进处理(累加或累乘等等),同时可加入第三个值

            即z 一并计算,最终得到的是一个值

    from functools import reduce           从模块中引入reduce
    num_l = [1,2,3,100]
    def reduce_test(func,array,init=None):
        if init is None:
            res = array.pop(0)
        else:
            res=init
        for num in array:
            res = func(res,num)
    
        return res
    
    print(reduce_test(lambda x,y:x*y,num_l,100))
    print(reduce(lambda x,y:x*y,num_l,100))
    运行结果:

    60000
    60000                          可知 reduce函数与自定义的reduce_test()函数作用相同,返回的是一个值

  • 相关阅读:
    Spring配置文件中别名的使用
    Spring IOC容器创建对象的方式
    sass安装及使用
    word转html 压缩图片网站
    Yarn 和 Npm 命令行切换 摘录
    react生命周期
    event事件
    Flex 布局
    YYYY-mm-dd HH:MM:SS 时间格式
    页面按钮埋点+跟踪location.search
  • 原文地址:https://www.cnblogs.com/jgua/p/13504278.html
Copyright © 2011-2022 走看看