python lambda

lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。

lambda 表达式的语法格式如下:
name = lambda [list] : 表达式

其中,定义 lambda 表达式,必须使用 lambda 关键字;[list] 作为可选参数,等同于定义函数是指定的参数列表;value 为该表达式的名称。

add = lambda x,y:x+y
print(add(3,4))
7

if 搭配 lambda 使用的效果如下:

add = lambda x,y:x+y if x>3 else 0
print(add(1,4))
print(add(4,4))
0
8
f = lambda x: ['small', 'big'][x>100]
print(f(101))
print(f(99))
big
small


部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。

  • filter函数。此时lambda函数用于指定过滤列表元素的条件。
a=filter(lambda x: x % 3 == 0, [1, 2, 3])
print(list(a))
[3]
  • sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。
a=sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
print(list(a))
[5, 4, 6, 3, 7, 2, 8, 1, 9]

将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

  • map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。
a=map(lambda x: x+1, [1, 2,3])
print(list(a))
[2, 3, 4]
#效果类似于如下的for循环
foo = [1,2,3,4,5]
print( [x * 2 + 10 for x in foo])
print( [x * 2 + 10 if x>4 else 0 for x in foo])
[12, 14, 16, 18, 20]
[0, 0, 0, 0, 20]
  • reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
from functools import reduce
a= reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(a))
print(a,type(a))
['1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ',', ' ', '5', ',', ' ', '6', ',', ' ', '7', ',', ' ', '8', ',', ' ', '9']
1, 2, 3, 4, 5, 6, 7, 8, 9 <class 'str'>

对比:

def add(x, y):
    return x + y
def mulit(x, y):
    return x * y

print(reduce(add, [1, 2, 3, 4, 5])) #输出:15
print(reduce(add, [1, 2, 3, 4, 5], 10)) #输出:25

print(reduce(mulit, [1, 2, 3, 4, 5])) #输出:120
print(reduce(mulit, [1, 2, 3, 4, 5], 10)) #输出:1200

print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5]))#输出:15
print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5], 10))#输出:25
print(reduce(lambda x,y:x*y,[1, 2, 3, 4, 5], 10))#输出:1200
15
25
120
1200
15
25
1200

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

推荐阅读更多精彩内容

  • lambda是Python编程语言中使用频率较高的一个关键字。那么,什么是lambda?它有哪些用法?网上的文章不...
    BABYMISS阅读 123评论 0 2
  • 橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic。 @[toc](滚雪球学...
    梦想橡皮擦阅读 286评论 0 1
  • 一. lambda表达式 Python中定义了一种快速简化定义匿名函数的方式叫做lambda表达式,它的作用就是代...
    躺在稻田里的小白菜阅读 490评论 0 1
  • 引言 前段时间,没事儿时翻看了自己刚参加工作时写的一些代码,发现代码中有好几处分别都用到了lambda表达式,从代...
    汤尼房阅读 7,630评论 0 2
  • 1.lambda作为一个表达式,定义了一个匿名函数,简化了函数定义书写形式,使得代码更为简洁。 2.python中...
    _沉梦昂志阅读 341评论 1 0