zoukankan      html  css  js  c++  java
  • day12——Python高阶函数及匿名函数

    高阶函数:就是把函数当成参数传递的一种函数,例如:
    def add(x,y,f):
        return f(x) + f(y)
    print(add(-8,11,abs))
    结果:19
    解释:
    1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值
    2.最后再做和运算
    map()函数
        map函数时Python内置的一个高阶函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表,如下所示:
    def f2(x):
        return x*y
    l = [1,2,3,4,5,6]
    print(map(f2,l))
    结果:
    [1,4,9,26,25,36]
    解释:
    1.l是一个list,把此list的元素传入函数f2,求每个元素的平方
    2.把最终所有的计算结果合并成一个新的list,就如新的结果所示:
     
    reduce()函数
    reduce()函数也是Python内置的一个高阶函数,reduce()函数接收的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()传入的函数f必须接收两个参数,第一次调用是把list的前两个元素传递给f,第二次调用时,就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,传入f进行操作,以后以 以此类推,并返回最终结果值。
    例子如下所示:
    def f(a,b)
        return a + b
    print(reduce(f,[1,2,3,4,5],10) #f后面是列表
    结果:25
    解释:
    1.计算a = f(1,2)的值为3
    2.计算b = f(a,3)的值为6
    3.计算c = f(b,4)的值为10
    4.计算d = f(c,5)的值为15
    5.计算f = d(d,10)的值为25
    其实就是相当于1+2+3+4+5+10,最后的10是一个默认值,及最终再执行一次。
     
    filter()函数
        filter英文单词就是过滤的意思,filter()函数就是Python内置的另一个有用的高阶函数,filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。例子如下:
    def is_odd(x):
        return x % 2 == 1
    print(filter(is_odd,[1, 2, 3, 4, 5, 6, 7]))
    结果:[1,3,5,7]
    解释:
    1.list的元素以此传入到函数is_odd
    2.is_odd判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃
    3.把最终所有符合条件的元素组成一个新的列表
     
     
     
    #高阶函数map()函数,第一个函数为自定义函数,第二个参数为一个迭代对象
    l = [1, 2, 3, 4, 5] #把此处[]改为()最终结果还是一个列表,map的返回值还是一个列表
    def f2(x):
        return x*x
    m = map(f2,l)
    print(type(m))
    print('#'*50)
    print(m)
     
    #reduce()函数
    # 传入的函数必须接收两个参数,把可迭代对象的两个参数作为函数的实参,传入到f函数中
    # 把每次f运算的结果作为第一个实参,可迭代对象的下一个元素作为另一个实参,传入函数f中
    # 以些类推,最后得到结果
    print('#'*50)
    def f(a,b):
        return a + b
    print(reduce(f,[1, 2, 3, 4, 5], 10)) #f后面是列表,
     
    print('#'*50)
    #filter()函数
    #每次把可迭代对象的元素传入进去,如果返回为True,则保留该元素,如果返回为False,则不保留该元素
    c = [1, 2, 3, 4, 5, 6, 7, 8]
    def is_odd(x):
        return x % 2 == 1
    print(filter(is_odd,c))
    打印结果为:
     
    匿名函数:没有名字的函数,那为什么要设立匿名函数,它有什么作用呢?lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
    常规版本:
    def fun(x,y)
        retrun x*y
    lambda版本:
    r = lambda x,y:x*y
    print(r(2,3))
    print(type(r))
    结果:6
     
    #匿名函数,用的不是太多,
    def sum(x,y):
    return x+y
    m = lambda x,y:x+y
    print(m)
    print('#'*20)
    print(m(4,5))
    #sorted()是高阶涵数
    #对字典进行排序
    mm = dict(a=1, c=3, b=10, d=9)
    print('#'*20)
    print(mm)
    for i in mm:
    print i
    print('#' * 20)
    for j in mm.iteritems():
    print(j)
    print('#'*20)
    test = sorted(mm.iteritems(),key=lambda d: d[1])
    print(test)
     
    打印结果为:
     
     
  • 相关阅读:
    又见JavaWeb的中文乱码
    Java 中文字符串编码之GBK转UTF-8
    关于Java项目打包
    FreeSWITCH无法读取wav文件
    CentOS 7 最小化安装的网络配置
    虚拟机无法使用网卡桥接模式
    阿里云建站流程
    Spring MVC无法获取ajax POST的参数和值
    Mysql ERROR 1064 (42000)
    eclipse创建java类时自动添加注释
  • 原文地址:https://www.cnblogs.com/yangjinbiao/p/7774135.html
Copyright © 2011-2022 走看看