python高阶函数

python高阶函数

python高阶函数有很多,我们这里主要介绍六种常用的高阶函数:

  • lambda()匿名函数,filter()筛选函数,map()函数,reduce()函数,zip()函数 ,sorted()函数

1.lambda()匿名函数

  • 概念

    • 是指一类无需定义标识符(函数名)的函数或子程序。

  • 语法:

    • lambda 形参:返回值

  • 解释

    • lambda 只是一个表达式,函数体比 def 简单很多

    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

    • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

  • 示例:

    #例一:
    sum = lambda a,b:a+b
    print(sum(10,20))    # 30
    print(sum(20,30))    # 50
    #例二:
    #对字典排序
    infors = [{"name":"wang","age":18},{"name":"li","age":20},{"name":"qian","age":30}]
    infors.sort(key=lambda x:x['age']) #根据值对字典排序
    print(infors)
    ​
    #例三: 
    def test(a,b,func):
        result = func(a,b)
        return result
    ​
    num = test(11,22,lambda x,y:x+y)
    print(num)      #33
    View Code

2.filter()筛选函数

  • 概念

    • filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,返回的是一个迭代器

  • 语法

    • filter(function, iterable)

    • 该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象

  • 示例

    #例一:
    def is_odd(n):
        return n % 2 == 1
    alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print(list(alist))     #[1, 3, 5, 7, 9]
    #例二:
    my_list=[1,2,'',3,4,'6',' ']
    new_list=list(filter(None,my_list))  
    print(new_list)      #[1, 2, 3, 4, '6', ' ']
    #注:None 函数 过滤掉'' 而不是过滤掉空字符串
    View Code

3.map()函数

  • 概念

    • map()函数接收的是一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

  • 语法

    • map(function, iterable, ...)

    • 参数:function -- 函数,iterable -- 一个或多个序列

    • 返回值:Python 2.返回列表。Python 3.返回迭代器。

  • 解释

    • map()函数不改变原有的 list,而是返回一个新的 list

  • 示例

    #例一:
    lst=[1,2,3,4,5,6,7,8,9]
    def f(x):
        return x*x
    lst1=list(map(f,lst))
    print(lst1)
    ​
    #例二:首字母大写,其他小写
    def standard_name(s):
        A = s[0:1].upper() + s[1:].lower()
        return A
    ​
    lst = ['zHAngSan','LISi','wangwu','ZHAOLIU']
    print(map(standard_name,lst))
    for i in map(standard_name,lst):
        print(i)
        
    # <map object at 0x000000000296ABA8>
    # Zhangsan
    # Lisi
    # Wangwu
    # Zhaoliu
    View Code

4.reduce()函数

  • 作用

    • reduce()函数接收的参数和 map()类似,但是行为不同。reduce() 函数会对参数序列中元素进行累积

  • 语法

    • reduce(function, iterable[, initializer])

    • 参数:function -- 函数,有两个参数。iterable -- 可迭代对象。initializer -- 可选,初始参数

    • reduce()传入的函数 f 必须接收两个参数,用传给 reduce 中的函数 f(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 f 函数运算,最后得到一个结果

  • 示例

    #注意 :在python3中如果使用reduce需要先导入
    #例一:
    from functools import reduce
    lst=[1,2,3,4,5,6]
    def sum(x,y):
        return x+y
    print(reduce(sum,lst))
    ​
    ​
    #例二:
    from functools import reduce
    def f(a,b):
        return a+b
    s = reduce(f,[1,2,3,4],10)
    print(s) #1+2+3+4+10.这里的第三个参数是做为初始值的。
    View Code

5.zip()函数

  • 作用

    • zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象 ,这个可迭代对象可以使用循环的方式列出其元素 ,若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相同.

  • 范例

    a=zip([1,2,3],['a','b','c'])
    print(a)            #<zip object at 0x00000000029DE9C8>
    print(list(a))      #[(1, 'a'), (2, 'b'), (3, 'c')]
    #上面其实可以看出一个打包的过程,对应的就有解包的方法,用'*'操作符可以实现解包:
    a=zip([1,2,3],['a','b','c'])
    print(list(zip(*a)))         #[(1, 2, 3), ('a', 'b', 'c')]
    #注意,zip返回的本质是一个生成器,如果利用list,或其他方法迭代后,生成器就是空的
    a=zip([1,2,3],['a','b','c'])
    print(list(a))          #[(1, 'a'), (2, 'b'), (3, 'c')]
    print(list(a))          #[]   因为上面已经把生成器使用了
    #当传入的两个参数的长度不同是,按短的进行处理
    a=zip([1,2,3,4],['a','b','c'])
    print(list(a))           #[(1, 'a'), (2, 'b'), (3, 'c')]
    View Code

     

posted @ 2019-09-16 08:44  Primrose  阅读(353)  评论(0编辑  收藏  举报