Python的lambda表达式
来自CloudWiki
什么是lambda表达式
- lambda表达式可以用来声明匿名函数,也就是没有函数名字的临时使用的小函数,尤其适合需要一个函数作为另一个函数参数的场合。也可以定义具名函数。
lambda表达式的写法
- lambda表达式只可以包含一个表达式,该表达式的计算结果可以看作是函数的返回值,不允许包含复合语句,但在表达式中可以调用其他函数。
- 普通写法:
def f(x, y, z): r = x + y + z; return r
- lambda写法:
>>> f = lambda x, y, z: x+y+z #可以给lambda表达式起名字 >>> f(1,2,3) #像函数一样调用 6 >>> g = lambda x, y=2, z=3: x+y+z #参数默认值 >>> g(1) 6 >>> g(2, z=4, y=5) #关键参数 11
lambda表达式的花式应用(可选)
- lambda列表:
>>> L = [(lambda x: x**2), (lambda x: x**3), (lambda x: x**4)] >>> print(L[0](2),L[1](2),L[2](2)) 4 8 16 *lambda字典: <nowiki>>>> D = {'f1':(lambda:2+3), 'f2':(lambda:2*3), 'f3':(lambda:2**3)} >>> print(D['f1'](), D['f2'](), D['f3']()) 5 6 8
- 映射lambda函数:
>>> L = [1,2,3,4,5] >>> print(list(map(lambda x: x+10, L))) #模拟向量运算 [11, 12, 13, 14, 15] >>> L [1, 2, 3, 4, 5]
- 在lambda表达式中调用函数
>>> def demo(n): return n*n >>> demo(5) 25 >>> a_list = [1,2,3,4,5] >>> list(map(lambda x: demo(x), a_list)) #在lambda表达式中调用函数 [1, 4, 9, 16, 25]
- 在排序中应用lambda规则:
>>> data = list(range(20)) #创建列表 >>> data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> import random >>> random.shuffle(data) #打乱顺序 >>> data [4, 3, 11, 13, 12, 15, 9, 2, 10, 6, 19, 18, 14, 8, 0, 7, 5, 17, 1, 16] >>> data.sort(key=lambda x: x) #和不指定规则效果一样 >>> data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> data.sort(key=lambda x: len(str(x))) #按转换成字符串以后的长度排序 >>> data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> data.sort(key=lambda x: len(str(x)), reverse=True) #降序排序 >>> data [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 例2:
>>> import random >>> x = [[random.randint(1,10) for j in range(5)] for i in range(5)] #使用列表推导式创建列表 #包含5个子列表的列表 #每个子列表中包含5个1到10之间的随机数 >>> for item in x: print(item) [5, 6, 8, 7, 4] [1, 5, 3, 9, 4] [9, 6, 10, 7, 6] [8, 2, 7, 1, 6] [1, 7, 5, 3, 5] >>> y = sorted(x, key=lambda item: (item[1], item[4])) #按子列表中第2个元素升序、第5个元素升序排序 >>> for item in y: print(item) [8, 2, 7, 1, 6] [1, 5, 3, 9, 4] [5, 6, 8, 7, 4] [9, 6, 10, 7, 6] [1, 7, 5, 3, 5]