64 lambda 表达式

avatar
作者
筋斗云
阅读量:0

lambda 表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,常用在临时需要一个类似于函数的功能但又不想定义函数的场合。

lambda 表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,该表达式的计算结果相当于函数的返回值。

f = lambda x, y, z: x + y + z  # 可以给 lambda 表达式起一个名字 print(f(1, 2, 3))  # 把 lambda 表达式当作函数使用  g = lambda x, y=2, z=3: x + y + z  # 支持默认值参数 print(g(1)) print(g(2, z=4, y=5))  # 调用时使用关键参数  L = [(lambda x: x ** 2), (lambda x: x ** 3), (lambda x: x ** 4)] print(L[0](2), L[1](2), L[2](2))  D = {'i': (lambda: 2 + 3), 'j': (lambda: 2 * 3), 'k': (lambda: 2 ** 3)} print(D['i'](), D['j'](), D['k']())  s = [1, 2, 3, 4, 5] print(list(map(lambda i: i + 10, s)))  # lambda 表达式作为函数参数 

在这里插入图片描述

def func(i):     return i * i   func(5) s = [1, 2, 3, 4, 5] print(list(map(lambda i: func(i), s)))  # lambda表达式中可以调用函数 

在这里插入图片描述

data = list(range(20)) import random  random.shuffle(data) print(data) data.sort(key=lambda x: x)  # 用在列表的sort方法中,作为函数参数 print(data) data.sort(key=lambda x: len(str(x)))  # 使用 lambda 表达式指定排序规则 print(data) data.sort(key=lambda x: len(str(x)), reverse=True)  # 使用 lambda 表达式指定排序规则 print(data) 

在这里插入图片描述

在使用 lambda 表达式时,要注意变量作用域可能带来的问题。

s = [] for i in range(10):     s.append(lambda j=i: j ** 2) print(s[0](), s[1](), s[-2](), s[-1]()) 

在这里插入图片描述

在这里插入图片描述

# 相当于只有一条 return i 语句的小函数 f = lambda: i i = 3  # 调用时真正的返回值取决于全局变量i的值 print(f())  i = 5 print(f()) 

在这里插入图片描述

虽然使用 lambda 表达式可以很方便灵活地定义一些小函数,但是,如果仅仅是需要一个简单的运算,那么应该尽量使用标准库 operator 中提供的函数,避免自己定义 lambda 表达式,operator 中的函数执行效率更高一些。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!