python匿名函数之lambda函数详解

Written by

in

文章目录
  • 匿名函数:是指一类无需定义标识符(函数名)的函数或子程序 关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: 有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“ 相比函数,lamba 表达式具有以下 2 个优势: 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁; 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。 def calc(x,y): return x**y #换成匿名函数 calc = lambda x,y:x**y print(calc(2,5)) def calc(x,y): if x > y: return x*y else: return x / y #三元运算换成匿名函数 calc = lambda x,y:x * y if x > y else x / y print(calc(2,5))
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Python lambda匿名函数深入讲解 python函数和python匿名函数lambda详解 Python lambda 匿名函数优点和局限性深度总结 Python浅析匿名函数lambda的用法 Python 中的lambda匿名函数和三元运算符  Python 匿名函数lambda 详情 python中lambda匿名函数详解
  • 目录
    • 一、概念介绍
    • 二、使用场景
      • 2.1、和map函数一起使用
      • 2.2、与reduce函数一起使用
      • 2.3、和filter函数一起使用
      • 2.4、和sorted函数一起使用
      • 2.5、与三元运算结合
    • 总结

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

      关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。

      匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

      用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

      有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“

      相比函数,lamba 表达式具有以下 2 个优势:

      • 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
      • 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。
      def calc(x,y):
          return x**y
      
      #换成匿名函数
      calc = lambda x,y:x**y
      print(calc(2,5))
      
      def calc(x,y):
          if x > y:
              return x*y
          else:
              return x / y
          
      #三元运算换成匿名函数
      calc = lambda x,y:x * y if x > y else x / y
      print(calc(2,5))

      map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

      遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。

      ## 求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表
      
      #一般解决方案
      li = [1,2,3,4,5,6,7,8,9]
      for ind,val in enumerate(li):
          li[ind] = val * val
      print(li)
      # [1, 4, 9, 16, 25, 36, 49, 64, 81]
      
      # 高级解决方案
      li = [1,2,3,4,5,6,7,8,9]
      print(list(map(lambda x:x*x,li)))
      # [1, 4, 9, 16, 25, 36, 49, 64, 81]
      

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

      reduce(func,[1,2,3]) 等同于 func(func(1,2),3),返回值为单个值

      对于序列内所有元素进行累计操作

      #接受一个list并利用reduce()求积
      from functools import reduce
      li = [1,2,3,4,5,6,7,8,9]
      print(reduce(lambda x,y:x * y,li))
      # 结果=1*2*3*4*5*6*7*8*9 = 362880
      
      a = [12, 34, 56]
      
      print reduce(lambda x , y: x + y, a)  # 102
      
      print reduce(lambda x , y: x - y, a) # -78

      filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

      对于序列中的元素进行筛选,最终获取符合条件的序列

      # 在一个list中,删掉偶数,只保留奇数
      li = [1, 2, 4, 5, 6, 9, 10, 15]
      print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]
      
      # 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
      li = list(range(1, 200))
      print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

      sorted(iterable, /, *, key=None, reverse=False)

      接收一个key函数来实现对可迭代对象进行自定义的排序

      • 可迭代对象:主要与列表,字符串,元祖,集合和字典
      • key:接受一个函数,根据此函数返回的结果,进行排序
      • reverse:排序方向,默认为从小到大,reverse=True为逆向
      # 对列表按照绝对值进行排序
      li= [-21, -12, 5, 9, 36]
      print(sorted(li, key = lambda x:abs(x)))
      # [5, 9, -12, -21, 36]
      
      """
      sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:
      
      keys排序结果 => [5, 9,  12,  21, 36]
                      |  |    |    |   |
      最终结果     => [5, 9, -12, -21, 36]
      """
      
      # 把下面单词以首字母排序
      li = ['bad', 'about', 'Zoo', 'Credit']
      print(sorted(li, key = lambda x : x[0]))
      # 输出['Credit', 'Zoo', 'about', 'bad']
      """
      对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
      """
      
      # 假设我们用一组tuple表示学生名字和成绩:
      
      L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
      # 请用sorted()对上述列表分别按名字排序
      print(sorted(L, key = lambda x : x[0]))
      # 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
      
      # 再按成绩从高到低排序
      print(sorted(L, key = lambda x : x[1], reverse=True))
      # 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

      如下:

      #if 条件为真的时候返回if前面内容,否则返回0 
      exp1= lambda x:x+1 if  2==1 else 0 
      print(exp1(2))
      exp2 = lambda x:x+1 if  1==1 else 0 
      print(exp2(2))
      
      输出:
      0
      3
      
      #if not 为假返回if not前面内容,否则返回0  
      exp3 = lambda x:x+1 if not 2==1 else 0  
      print(exp3(2))  
        
      exp4 = lambda x:x+1 if not 1==1 else 0  
      print(exp4(2))
      
      输出:
      3
      0

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

      您可能感兴趣的文章:

      • Python lambda匿名函数深入讲解
      • python函数和python匿名函数lambda详解
      • Python lambda 匿名函数优点和局限性深度总结
      • Python浅析匿名函数lambda的用法
      • Python 中的lambda匿名函数和三元运算符
      •  Python 匿名函数lambda 详情
      • python中lambda匿名函数详解

      站内搜索