lambda表达式

1. 定义lambda表达式

  • lambda表达式又称匿名函数,常用来表示内部仅包含1行表达式的函数,语法格式如下:
func = lambda [arg1[, arg2,... argN]]: expression

func是一个变量,引用lambda定义的函数对象
lambda是关键字
[arg1[, arg2,... argN]]是可选参数,等同于定义函数时要指定的参数列表
expression是一行表达式,其运算结果就是函数的返回值

  • 转换成def函数语法如下:
def func([arg1[, arg2,... argN]]):
      return expression
  • 举例:设计求两个数之和
# 普通函数的方式
def add(x, y):
    return x+y
print(add(3, 4))

# lambda表达式
add1 = lambda x, y: x+y
print(add1(3, 4))

2. lambda表达式与def函数区别

  • lambda可以定义一个匿名函数,而def定义的函数必须有一个名字
  • lambda是一个表达式,而不是一个语句。因此能够出现在python语法不允许def出现的地方。例如,在一个列表常量中,或者函数调用的参数中
  • lambda的主体是一个单个的表达式,而不是一个代码块。lambda包含的代码相当于def中return子句后的代码,只能是简单的表达式,所以说lambda的能力小于def,在lambda中只能使用简单的语法,不能使用if else while return等语句

3. 相比def函数,lambda表达式的优势

  • 对于单行函数,使用lambda表达式可以省去定义函数的过程,让代码更加简洁
  • 对于不需要多次复用的函数,使用lambda表达式可以在用完后立即释放,提高程序执行的性能

4. 应用

filter()

筛选100以内的3的倍数,并生成一个列表

# lambda表达式实现
l = list(filter(lambda x: True if x % 3 == 0 else False, range(100)))
print(l)
# def函数实现
def f(x):
    if x % 3 == 0:
        return True
    else:
        return False
l = list(filter(f, range(100)))
print(l)
"""
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
"""

filter()简单的理解为过滤器,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),过滤器会依次将序列的值传入function中,如果返回True的话,将其重新生成一个列表返回。

map()

# def函数实现
li = [11, 22, 33]
sl = [1, 2, 3]
def f(a, b):
    return a+b
l1 = map(f, li, sl)
print(list(l1))

# lambda表达式实现
l2 = map(lambda a, b: a+b, li, sl)
print(list(l2))
"""
[12, 24, 36]
[12, 24, 36]
"""

map()表示映射,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),也是将序列放入函数进行运算,不论运算结果是什么,map()都将逐一反馈

reduce()

对序列内元素进行累加((((1+2)+3)+4)+5)

from functools import reduce

# def函数实现
li = [1, 2, 3, 4, 5]
def f(a, b):
    return a+b
l1 = reduce(f, li)
print(l1)

# lambda表达式实现
l2 = reduce(lambda a, b: a+b, li)
print(l2)
"""
15
15
"""

对序列内元素进行阶乘((((1*2)*3)*4)*5)

# def函数实现
def f(a, b):
    return a*b
l1 = reduce(f, range(1, 6))
print(l1)

# lambda表达式实现
l2 = reduce(lambda a, b: a*b, range(1, 6))
print(l2)
"""
120
120
"""

reduce()表示累计,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),也是将序列放入函数进行累计运算

sort()

根据每个元组的第一个元素进行排序

a = [(4, 1), (1, 2),  (9, 10), (13, -3)]
a.sort(key=lambda x: x[0])
print(a)
"""
[(1, 2), (4, 1), (9, 10), (13, -3)]
"""

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容