zoukankan      html  css  js  c++  java
  • Python高阶函数和匿名函数

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

    注解:

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

    2.最后在做和运算

    map()函数

     python内置的一个高阶函数,它接收一个函数f和一个list,并且把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表,如下:

    注解:

    1.l 是一个list,把此list的元素传入函数f2,求每个元素的平方

    2.把最终所有计算的结果合并成一个新的list

    reduce()函数

    reduce()函数也是python的内置高阶函数,reduce()函数接收的的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()传入的参数f必须接受2个参数,

    第一次调用是把list的前两个元素传递给f,第二次调用时,就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,传入f进行操作,以此类推,并最终返回结果;

    注解:

    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,10)的值为25

    其实就是相当于1+2+3+4+5+10 ,最后的10为默认值,及最终执行一次

    filter()函数

    filter()函数是python内置的另一个有用的高阶函数,filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回true或false,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件的元素组成的list;例

    注解:

    1.llist元素以此传入到函数f

    2.f判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃

    3.把最终符合条件的元素组成一个新的列表

    sorted()函数

    sorted() 函数对所有可迭代的对象进行排序操作。

    sort 与 sorted 区别:

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

    sorted 语法:

    sorted(iterable[, cmp[, key[, reverse]]])

    参数说明:

    • iterable -- 可迭代对象。
    • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

    返回值

    返回重新排序的列表。

    以下实例展示了 sorted 的使用方法:

    >>>a = [5,7,6,3,4,1,2]

    >>> b = sorted(a) # 保留原列表

    >>> a [5, 7, 6, 3, 4, 1, 2]

    >>> b [1, 2, 3, 4, 5, 6, 7]

    >>> L=[('b',2),('a',1),('c',3),('d',4)]

    >>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数

    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

    >>> sorted(L, key=lambda x:x[1]) # 利用key

    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

    匿名函数

    python 使用 lambda 来创建匿名函数。

    • lambda只是一个表达式,函数体比def简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    语法

    lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression


    如下实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 可写函数说明
    sum = lambda arg1, arg2: arg1 + arg2;
     
    # 调用sum函数
    print "相加后的值为 : ", sum( 10, 20 )
    print "相加后的值为 : ", sum( 20, 20 )

    以上实例输出结果:

    相加后的值为 :  30
    相加后的值为 :  40

  • 相关阅读:
    蓝桥杯--算法训练 区间k大数查询
    vijos1782:借教室
    vijos1779国王游戏
    C++大数模板
    HDU1042(N!:设4为基数)
    HDU1026(延时迷宫:BFS+优先队列)
    POJ3984(迷宫问题)
    HDU3018:Ant Trip(欧拉回路)
    HDU5438:Ponds(拓扑排序)
    2008北航:字符串匹配
  • 原文地址:https://www.cnblogs.com/sunminy/p/7805095.html
Copyright © 2011-2022 走看看