lambda在python中的意思_“ lambda”在Python中是什么意思,最简单的使用方式是什么?...

您能否举一个示例以及其他示例来说明何时以及何时不使用Lambda?

我的书给了我一些例子,但它们令人困惑。

docs.python.org/tutorial/controlflow.html#lambda-forms的哪一部分令人困惑或不完整? 哪本书令人困惑? 它的哪些部分令人困惑?

Lambda源自Lambda演算(AFAIK),最初是在Lisp中实现的,基本上是一个匿名函数-该函数没有名称,可以在线使用,换句话说,您可以将标识符分配给lambda函数在单个表达式中如下所示:

1

2

3>>> addTwo = lambda x: x+2

>>> addTwo(2)

4

这将addTwo分配给匿名函数,该函数接受1个参数x,并且在函数主体中将2加到x,它返回函数主体中最后一个表达式的最后一个值,因此没有return关键字。

上面的代码大致等效于:

1

2

3

4

5>>> def addTwo(x):

... return x+2

...

>>> addTwo(2)

4

除了不使用函数定义外,您还要为lambda分配一个标识符。

使用它们的最佳位置是当您真的不想使用名称定义函数时,可能是因为该函数只会被使用一次而不会被多次使用,在这种情况下,使用函数定义会更好。

使用lambdas的哈希树示例:

1

2

3

4

5

6

7

8

9

10>>> mapTree = {

... 'number': lambda x: x**x,

... 'string': lambda x: x[1:]

... }

>>> otype = 'number'

>>> mapTree[otype](2)

4

>>> otype = 'string'

>>> mapTree[otype]('foo')

'oo'

在此示例中,我实际上并不想为这些函数中的任何一个定义名称,因为我只会在哈希中使用它们,因此,我将使用lambda。

只是一个小小的小问题,就得出了一个很好的答案:lambda并非来自Lisp,而是来自lambda演算。

啊,是的,我的使用错误是由我引起的-我进行了一些修改。 我还有什么要添加/修改的?

+1很棒的答案,请考虑在字典示例中更改名称type。因为它是内置的...

好的答案,但是我建议用更容易理解和更标准的示例替换示例。 类似于在地图中使用lambda(map(lambda x:x * 2,l))。

我不知道您使用的是哪本书,但"深入Python"中有一段我认为是有益的。

在2017年,互联网上任何地方都没有diveintopython.org网站!

使用lambda有点时尚。当您可以摆脱一个非常简单的功能时,通常只是将其存储在某个地方(可能在功能列表中,或在GUI工具包数据结构中等),人们会感到lambda减少了代码中的混乱。

在Python中,只能使一个lambda返回一个表达式,并且lambda不能跨越多行(除非您使用行尾的反斜杠技巧将多行连接在一起)。人们要求Python为lambda添加改进,但是这没有发生。据我了解,为使lambda能够编写任何函数而进行的更改将使Python中的解析代码大大复杂化。而且,由于我们已经有了def来定义函数,因此认为增益不值得复杂化。因此,在某些情况下,您可能希望在无法使用lambda的情况下使用。在这种情况下,您可以只使用def:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15object1.register_callback_function(lambda x: x.foo() > 3)

def fn(x):

if x.foo() > 3:

x.recalibrate()

return x.value() > 9

elif x.bar() > 3:

x.do_something_else()

return x.other_value < 0

else:

x.whatever()

return True

object2.register_callback_function(fn)

del(fn)

第一个回调函数很简单,并且一个lambda就足够了。对于第二个,根本无法使用lambda。通过使用def并创建绑定到名称fn的函数对象,然后将fn传递给register_callback_function(),可以达到相同的效果。然后,为了说明我们可以,我们在名称fn上调用del()解除绑定。现在,名称fn不再与任何对象绑定,但是register_callback_function()仍然具有对功能对象的引用,因此功能对象仍然存在。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值