-
2021-03-05 11:30:33
在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?
下面就上面的问题进行一下解答。
1、lambda是什么?
看个例子:
1 g = lambda x:x+1
看一下执行的结果:
g(1)
>>>2
g(2)
>>>3
当然,你也可以这样使用:
lambda x:x+1(1)
>>>2
可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:
1 def g(x):2 return x+1
非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。
Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
print reduce(lambda x, y: x + y, foo)
139
上面例子中的map的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
比如上面map的例子,可以写成:
print [x * 2 + 10 for x in foo]
非常的简洁,易懂。
filter的例子可以写成:
print [x for x in foo if x % 3 == 0]
同样也是比lambda的方式更容易理解。
上面简要介绍了什么是lambda,下面介绍为什么使用lambda,看一个例子(来自apihelper.py):
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
在Visual Basic,你很有可能要创建一个函数,接受一个字符串参数和一个 *collapse
参数,并使用 if
语句确定是否压缩空白,然后再返回相应的值。这种方式是低效的,因为函数可能需要处理每一种可能的情况。每次你调用它,它将不得不在给出你所想要的东西之前,判断是否要压缩空白。在 Python 中,你可以将决策逻辑拿到函数外面,而定义一个裁减过的 lambda
函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很少引起那些令人讨厌 (哦,想到那些参数就头昏) 的错误。
通过此例子,我们发现,lambda的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果不是非常熟悉python的人或许会对此感到不可理解。
lambda 定义了一个匿名函数
lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
如果可以使用for...in...if来完成的,坚决不用lambda。
如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
总结:lambda 是为了减少单行函数的定义而存在的。
filter() in python 3 does not return a list, but a iterable filter object. Call next() on it to get the first filtered item or list(filter)
更多相关内容 -
详解Python的Lambda函数与排序
2020-12-23 12:07:33lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数与lambda函数的定义方式。 前几天看到了一行求1000的阶乘的Python代码 Python代码 print... -
Python中lambda指的是什么
2020-12-16 06:29:44Python中lambda指的是什么发布时间:2020-09-08 14:53:20来源:亿速云阅读:66作者:小新这篇...在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda...Python中lambda指的是什么
发布时间:2020-09-08 14:53:20
来源:亿速云
阅读:66
作者:小新
这篇文章将为大家详细讲解有关Python中lambda指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?
下面就上面的问题进行一下解答。
lambda是什么?
看个例子:g = lambda x:x+1
看一下执行的结果:g(1)>>>2g(2)>>>3
当然,你也可以这样使用:lambda x:x+1(1)>>>2
可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:def g(x):2 return x+1
非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。
Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce:>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>>>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]>>> >>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>>>>> print reduce(lambda x, y: x + y, foo)139
上面例子中的map的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
比如上面map的例子,可以写成:print [x * 2 + 10 for x in foo]
非常的简洁,易懂。
filter的例子可以写成:print [x for x in foo if x % 3 == 0]
同样也是比lambda的方式更容易理解。
上面简要介绍了什么是lambda,下面介绍为什么使用lambda,看一个例子(来自apihelper.py):processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
在Visual Basic,你很有可能要创建一个函数,接受一个字符串参数和一个 collapse 参数,并使用 if语句确定是否压缩空白,然后再返回相应的值。这种方式是低效的,因为函数可能需要处理每一种可能的情况。每次你调用它,它将不得不在给出你所想要的东西之前,判断是否要压缩空白。在 Python 中,你可以将决策逻辑拿到函数外面,而定义一个裁减过的 lambda函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很少引起那些令人讨厌 的错误。
通过此例子,我们发现,lambda的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果不是非常熟悉python的人或许会对此感到不可理解。lambda 定义了一个匿名函数
lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
如果可以使用for...in...if来完成的,坚决不用lambda。
如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
总结:lambda 是为了减少单行函数的定义而存在的。
关于Python中lambda指的是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
-
python 用lambda函数替换for循环的方法
2020-09-20 10:05:27今天小编就为大家分享一篇python 用lambda函数替换for循环的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python中lambda的用法及其与def的区别解析
2020-12-25 14:17:59python中的lambda通常是用来在python中创建匿名函数的,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python中的lambda还有如下几点和def不一样: 1. python lambda会创建一个函数对象,但不会把这... -
python lambda表达式在sort函数中的使用详解
2020-09-18 17:50:51主要介绍了python lambda表达式在sort函数中的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
python中Lambda表达式详解
2021-01-02 12:14:04在这一节里,虽然我们 不打算深入学习这类函数,但是会用几个例子来演示它们是如何用在网 页抓取中的。 Lambda 表达式本质上就是一个函数,可以作为变量传入另一个函数; 也就是说,一个函数不是定义成 f(x, y),... -
python中lambda()的用法
2021-01-20 04:25:53下面看看在python中匿名函数的使用。 1.lambda只是一个表达式,函数体比def简单很多。 2.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 3.lambda表达式是起到一个函数... -
python中lambda函数 list comprehension 和 zip函数使用指南
2020-12-25 10:33:58这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。 def f(x): return x*2,用lambda函数来替换可以写成:g = lambda x: x*2`g(3)结果是6.(lambda x: x*2)(3)`也是同样的效果。 这是一个 ... -
Python中 Lambda表达式全面解析
2020-12-23 12:06:03“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包... -
python中的lambda表达式用法详解
2021-01-20 04:46:21本文实例讲述了python中的lambda表达式用法。分享给大家供大家参考,具体如下: 这里来为大家介绍一下lambda函数。 lambda 函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方 。... -
Python使用lambda表达式对字典排序操作示例
2020-09-19 00:00:43主要介绍了Python使用lambda表达式对字典排序操作,结合实例形式分析了lambda表达式实现字典按键排序、按值排序、多条件排序相关操作技巧,需要的朋友可以参考下 -
python中lambda的用法
2021-01-12 03:41:32先来看一个最简单例子:def f(x):return x**2print f(4)Python中使用lambda的话,写成这样g = lambda x : x**2print g(4)二、lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别...一、lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:
def f(x):
return x**2
print f(4)
Python中使用lambda的话,写成这样
g = lambda x : x**2
print g(4)
二、lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。
其实说的没错,lambda在Python这种动态的语言中确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。
1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。
lambda基础
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象,见证一下:
>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]>>> print reduce(lambda x, y: x + y, foo)
139
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话
2013-7-22 21:00 学习笔记
1,lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务。
f = lambda x,y,z : x+y+z
print f(1,2,3)
g = lambda x,y=2,z=3 : x+y+z
print g(1,z=4,y=5)
输出结果为:
2,lambda表达式常用来编写跳转表(jump table),就是行为的列表或字典。例如:
L = [(lambda x: x**2),
(lambda x: x**3),
(lambda x: x**4)]
print L[0](2),L[1](2),L[2](2)
D = {'f1':(lambda: 2+3),
'f2':(lambda: 2*3),
'f3':(lambda: 2**3)}
print D['f1'](),D['f2'](),D['f3']()
输出结果为:
4 8 16
5 6 8
3,lambda表达式可以嵌套使用,但是从可读性的角度来说,应尽量避免使用嵌套的lambda表达式。
4,map函数可以在序列中映射函数进行操作。例如:
def inc(x):
return x+10
L = [1,2,3,4]
print map(inc,L)
print map((lambda x: x+10),L)
输出结果为:
[11, 12, 13, 14]
[11, 12, 13, 14]
5,列表解析可以实现map函数同样的功能,而且往往比map要快。例如:
print [x**2 for x in range(10)]
print map((lambda x: x**2), range(10))
输出结果为:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6,列表解析比map更强大。例如:
print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1]
输出结果为:
[1, 3, 5, 7, 9, 3, 5, 7, 9, 11, 5, 7, 9, 11, 13]
7,生成器函数就像一般的函数,但它们被用作实现迭代协议,因此生成器函数只能在迭代语境中出现。例如:
def gensquares(N):
for i in range(N):
yield i**2
for i in gensquares(5):
print i,
输出结果为:
0 1 4 9 16
8,所有的迭代内容(包括for循环、map调用、列表解析等等)将会自动调用iter函数,来看看是不是支持了迭代协议。
9,生成器表达式就像列表解析一样,但它们是扩在圆括号()中而不是方括号[]中。例如:
for num in (x**2 for x in range(5)):
print num,
输出结果为:
0 1 4 9 16
10,列表解析比for循环具有更好的性能。尽管如此,在编写Python代码时,性能不应该是最优先考虑的。
11,没有return语句时,函数将返回None对象。
12,函数设计的概念:
耦合性:只有在真正必要的情况下才使用全局变量
耦合性:不要改变可变类型的参数,除非调用者希望这样做
耦合性:避免直接改变另一个文件模块中的变量
聚合性:每一个函数都应有一个单一的、统一的目标
13,最后给个默认参数和可变参数的例子:
def saver(x=[]):
x.append(1)
print x
saver([2])
saver()
saver()
saver()
输出结果为:
[2, 1]
[1]
[1, 1]
[1, 1, 1]
-
Python中lambda表达式定义函数示例
2019-04-01 15:26:27使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。...目的:帮助理解lambda表达式定义函数在Python中的具体使用。 -
在Python中使用lambda高效操作列表的教程
2020-12-25 14:58:22Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # return 4 map()/filter()/reduce() 需要两个参数,第一个是一个处理函数,第... -
在Python中使用Lambda函数的5种用法
2021-03-09 00:47:57欢迎关注“小白玩转Python”,发现更多 “有趣”引言Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一。支持多编程范例的 Python 也提供了一种简单的方法来定义 l...欢迎关注 “小白玩转Python”,发现更多 “有趣”
引言
Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一。
支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数。
用 Python 编写 lambda 函数的模板是:
lambda arguments : expression
它包括三个部分:
· Lambda 关键字
· 函数将接收的参数
· 结果为函数返回值的表达式
由于它的简单性,lambda 函数可以使我们的 Python 代码在某些使用场景中更加优雅。这篇文章将演示在 Python 中 lambda 函数的5个常见用法,并用有趣的例子来解释它们。
1.命名使用
如果我们只需要一个简单的函数,lambda 是一个很好的选择,因为它可以被看作是定义函数的一种更简单的方法。因此,我们可以给它一个名称,并像普通函数一样使用它。
lambda_add_ten = lambda x: x + 10 print(lambda_add_ten(5)) # 15 def add_ten(x): return x + 10 print(add_ten(5)) # 15
如上面的例子所示,add_ten() 和 lambda_add_ten() 方法的结果是相同的,但是 lambda 函数可以使我们的代码更短更清晰。
2. 与高阶函数配合
如果我们可以将 lambda 函数与 map()、 filter()和 reduce()等高阶函数一起使用,那么程序将变得更加优雅。
让我们来看下面这个问题:
给你一个列表如下,你能打印其中所有的奇数吗?
numbers = [1, 12, 37, 43, 51, 62, 83, 43, 90, 2020]
这个问题看起来很简单,但它足以区分初级和高级 Python 开发人员。
初级程序员可能会编写如下代码:
odd_number = [] for n in numbers: if n % 2 == 1: odd_number.append(n) print(odd_number) # [1, 37, 43, 51, 83, 43]
它工作正常,没有任何问题。然而,一个高级 Python 程序员只需要一行代码就可以做同样的事情:
print(list(filter(lambda x: x % 2 == 1, numbers))) # [1, 37, 43, 51, 83, 43]
它看起来更优雅,不是吗?
顺便说一下,上面的一行解决方案只是为了展示如何使用 lambda 函数。当然还有其他的单行解决方案,比如列表解析:
odd_numbers = [i for i in numbers if i % 2 == 1]
实际上,在许多情况下,列表内涵函数可能比高阶函数与 lambda 函数协作更具可读性。
3.赋予“key”参数
一些内置方法具有关键的参数,这些参数给我们提供了更多的灵活性。
例如,当我们使用 sorted()或 sort()方法对 Python 中的迭代进行排序时,关键参数决定如何比较迭代中的两个元素。
这里也是 lambda 函数的表演时间。
leaders = ["Warren Buffett", "Yang Zhou", "Tim Cook", "Elon Musk"] print(leaders) # ['Warren Buffett', 'Yang Zhou', 'Tim Cook', 'Elon Musk'] leaders.sort(key=lambda x: len(x)) print(leaders) # ['Tim Cook', 'Yang Zhou', 'Elon Musk', 'Warren Buffett']
如上所述,如果我们按照每个名称的长度对 leaders 列表进行排序,一个简单的方法是向 key 参数传递一个 lambda 函数。
另一个常见的使用场景是根据字典的键或值对其进行排序。
leaders = {4: "Yang Zhou", 2: "Elon Musk", 3: "Tim Cook", 1: "Warren Buffett"} print(leaders) # {4: 'Yang Zhou', 2: 'Elon Musk', 3: 'Tim Cook', 1: 'Warren Buffett'} leaders = dict(sorted(leaders.items(), key=lambda x: x[0])) print(leaders) # {1: 'Warren Buffett', 2: 'Elon Musk', 3: 'Tim Cook', 4: 'Yang Zhou'}
4.立即调用
立即调用的函数表达式(IIFE)是 JavaScript 中的一种习惯用法。Python 中的 lambda 函数也支持这个技巧。我们可以立即运行一个 lambda 函数,如下所示:
>>> (lambda x,y:x*y)(2,3) 6
但是,出于可读性和可维护性的考虑,最好只在 Python 的交互式解释器中使用这个技巧。
顺便说一句,如果你熟悉Python中的下划线技巧,则也可以使用以下方式。
>>> lambda x,y:x*y <function <lambda> at 0x7fc319102d30> >>> _(2,3) 6
5.在闭包中使用
闭包是一个功能强大的函数式编程特性,在 Python 中也可以使用。因为它是关于嵌套函数的,所以我们可以使用 lambda 函数来使程序更加清晰。
下面是使用闭包的一个例子:
def outer_func(): leader = "Yang Zhou" def print_leader(location=""): return leader + " in the " + location return print_leader Lead = outer_func()("UK") print(Lead) # Yang Zhou in the UK
我们该如何使用 lambda 函数来简化上面的代码?
def outer_func(): leader = "Yang Zhou" return lambda location="": leader + " in the " + location Lead = outer_func()("UK") print(Lead) # Yang Zhou in the UK
正如上面的例子所示,当我们使用嵌套函数时,lambda 函数可以帮助我们编写更易读和清晰的代码。
总结
Python 中的 lambda 函数为我们提供了更多的灵活性和方法设计选项。总之,我们应该熟悉以上五种常见用法,以便正确使用,而不是过度使用。
· END ·
HAPPY LIFE
-
python-lambda:一个工具包,用于在AWS Lambda中开发和部署无服务器Python代码
2021-01-30 14:24:50Python-lambda是用于在AWS Lambda中开发和部署无服务器Python代码的工具集。 征集贡献者 随着python-lambda和pytube都继续发展,我呼吁贡献者帮助构建新功能,审查请求请求,修复错误并维护整体代码质量。 如果您有... -
Python的lambda匿名函数的简单介绍
2021-01-20 05:07:11先来看一个最简单例子:复制代码 代码如下:def f(x):return x**2print f(4)Python中使用lambda的话,写成这样复制代码 代码如下:g = lambda x : x**2print g(4) lambda表达式在很多编程语言都有对应的实现。比如C#:... -
详解python中的lambda与sorted函数
2020-09-16 08:32:06主要介绍了python中的lambda与sorted函数的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下 -
LambdaMart:LambdaMart python 实现
2021-06-21 18:30:06兰达玛特 LambdaMart python 实现 -
python中lambda与def用法对比实例分析
2021-01-20 05:12:02本文实例对比分析了python中lambda与def的用法。分享给大家供大家参考。具体分析如下: 1、lambda用来创建匿名函数,不同于def(def创建的函数都是有名字的)。 2、lambda不会将结果赋给一个标识符,而def会将函数结果... -
浅析python的Lambda表达式
2020-12-26 11:30:40在python项目中,我们经常会用到lambda,那么lambda是什么呢,有什么作用,下面我们开始介绍 1、可以使用lambda关键字创建匿名函数。Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。所谓... -
Python中lambda函数用法
2021-01-13 05:48:281、先来看一个函数:def sum(x,y):return x+y用lambda来实现:p = lambda x,y:x+yprint(p(1,2))2、传入一个参数的lambda函数a=lambda x:x*xprint(a(2)) # 注意:这里直接a(2)可以执行,但没有输出的,因为没有print3...