• 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
  • 相关阅读:
    python 类定义 继承
    BAYSY2 的LVDS引脚 笔记
    Fedora20-32bit cross-compiling arm-linux-gcc4.3.2
    以冒泡排序为例--malloc/free 重定向stdin stdout
    笔记:程序内存管理 .bss .data .rodata .text stack heap
    第一章 数值和码制
    《将博客搬至CSDN》
    Servlet 3.0 新特性
    java Servlet接口及应用
    C语言输出单个汉字字符
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/11525448.html
Copyright © 2020-2023  润新知