Python lambda表达式

一、语法和介绍

  • 语法:lambda argument_list: expression
    • lambda函数:又称“匿名函数”
    • argument_list:参数列表,作为函数的输入
    • expression:表达式,只能用到参数列表中出现的参数,根据表达式计算得到的值作为函数的输出
  • 介绍:
    • lambda的函数体只有一个表达式,而非代码块,代码简洁
    • lambda函数无需命名即可快速调用
    • 简单单行函数或一次性函数可以用lambda表达式来书写

二、用法

  1. 匿名调用和命名调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # def函数写法
    def func(x, y):
    return x + y

    # lambada表达式既可以匿名直接调用,也可以赋值给某个变量再调用
    # 匿名调用
    print((lambda x, y: x + y)(2, 3))

    # 命名调用
    a = lambda x, y: x + y
    print(a(2, 3))
  2. 作为函数法返回值

    1
    2
    def sum(x, y):
    return lambda x, y: x + y
  3. 与其他函数配合使用

    • filter(function, iterable)函数

      1
      2
      3
      4
      5
      6
      7
      # 过滤掉某些不符合条件的元素
      # 其中iterable可以为列表、字符串或元组,逐一对元素通过function的条件进行筛选,然后保留下满足条件的数据。python3返回的是一个迭代器,可以用list进行转换得到输出结果
      # 此时lambda函数用于指定过滤列表元素的条件

      # 保留奇数
      nums = list(filter(lambda x: x % 2 == 1, nums))
      print(nums)
    • map(function, iterable)函数

      1
      2
      3
      4
      5
      6
      7
      # 会根据提供的function函数对指定序列做映射
      # 逐一对元素通过function操作,返回的是一个迭代器,可以用list进行转换
      # 此时lambda函数用于指定映射规则

      # 输出平方
      nums = list(map(lambda x: x ** 2, nums))
      print(nums)
    • reduce(function, iterable)函数

      1
      2
      3
      4
      5
      6
      # 对参数序列中的元素进行累计
      # 函数先将iterable中的第1和第2个元素进行function操作,将得到的结果与第3个数进行function操作,如此累积

      # 求和
      nums = reduce(lambda x, y: x + y, nums)
      print(nums)
    • sorted(iterable, key = function) 和 iterable.sort(key = function)函数

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      # 此时lambda函数用于指定对列表中所有元素进行排序的准则

      # 按字符串长度排序
      s = ["abdc", "djind", "in", "a"]
      s.sort(key=lambda x: len(x))
      print(s)

      # 按字典的键排序
      d = {4: "hhh", 3: "jidn", 5: "djien"}
      d = dict(sorted(d.items(), key=lambda x: x[0]))
      print(d)


      # 按元组的某一位排序
      d = [(1,2),(1,3),(4,0)]
      d = list(sorted(d, key = lambda x: x[1]))
      print(d)

三、举例

​ 将字符串按照字母顺序排序

1
2
3
4
5
# python中的字符串类型是不允许直接修改元素的。必须先把要排序的字符串放在容器里,如list。然后在通过sort函数排序,最后还原成字符串
s="string"
l=list(s)
l.sort()
s="".join(l)
1
2
3
4
s="string"
# 通过lambda表达式一行搞定
# 表达式为 (x.sort(), x)[1] 去元组中的第二个数,即已经排好序的参数x,而传入的参数是list(s)
s="".join((lambda x:(x.sort(),x)[1])(list(s)))