zoukankan      html  css  js  c++  java
  • python的高阶函数与匿名函数

    一、高阶函数的定义

      高阶函数:就是把函数当成参数传递的一种函数,例如:

    def add(x,y,f):
        return  f(x)+f(y)
    print(add(-8,11,abs)

      结果:19

      解释:

         1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值

         2.最后再做和运算

    二、Python内置的几个高阶函数

      1.map()函数

      map()函数接收两个参数,一个是函数(function),一个是序列(sequence),map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。程序代码如下:

    lt = (1,2,3,4,5)
    def f2(x):
        return x*x
    ml = map(f2,lt)
    print (type(ml))
    print (ml)

      结果:

      解释:定义的函数f2。写f2时,指的是函数对象本身,当我们写f2(1)时,指的是调用f函数,并传入参数1,期待返回结果1。因此,map()传入的第一个参数是f2,即函数对象本身。像map()函数这种能够接收函数作为参数的函数,称之为高阶函数(Higher-order function)。

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

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

      程序例子如下:

    print("#############reduce################")
    def f(x,y):
        return x + y
    print (reduce(f,[1, 2, 3, 4, 5],10))

      结果:

      3.filter()函数

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

      例子:在一个list中,删掉偶数,只保留奇数,程序代码如下:

    print ("###############filter##################")
    a = [1, 2, 3, 4, 5]
    def is_odd(x):
        return x%2 == 1
    print (filter(is_odd,a))

      结果:

      4.匿名函数

    • 没有函数名
    • 单条语句组成
    • 语句执行的结果就是返回值
    • 可用作sort的key函数

      例子如下:

    def sum(x,y):
        return x+y
    
    m = lambda x,y:x+y
    print (m(4,5))

      结果:9

      

      5.sorted函数

      对List、Dict进行排序,Python提供了两个方法。对给定的List L进行排序:
      方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
      方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

      sorted函数的语法:

    def sorted(iterable, cmp=None, key=None, reverse=False):

    可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下:

    • iterable:是可迭代类型;
    • cmp:用于比较的函数,比较什么由key决定;
    • key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
    • reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。
    • 返回值:是一个经过排序的可迭代类型,与iterable一样。

     参数说明:

      (1)  cmp参数
      cmp接受一个函数,拿整形举例,形式为:

    def f(a,b):
         return a-b

      如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了
     
    (2)  key参数
       key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下

    def f(a):
         return len(a)

      key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
     
    (3) reverse参数
      接受False 或者True 表示是否逆序

     例子:对字典进行排序,程序代码如下:

    print ("############对字典进行排序####################")
    mm = dict(a=1,c=3,d=9,b=10,f=4)
    print (mm)
    for i in mm:
        print i
    print ('#####################################')
    for j in mm.iteritems():
        print j
    test = sorted(mm)
    test =sorted(mm.iteritems(),key=lambda d:d[1])
    print (test)

    结果:

      

  • 相关阅读:
    UVa 12716 GCD XOR (简单证明)
    2.12 运行计划并取得数据行
    nyoj 628 小媛在努力 【搜索】
    ArcGIS Server 10.2 公布Oracle11g数据源的 Feature Service
    项目复习期总结3:CSS引入方式,凝视,命名规范,背景,行高,文本属性
    Android使用有道翻译API实如今线翻译功能
    _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
    夜· 启程
    你不知道的JavaScript(六)Box&Unbox
    pugixml读取unicode编码的xml文件的做法
  • 原文地址:https://www.cnblogs.com/huangdongju/p/7774783.html
Copyright © 2011-2022 走看看