为了账号安全,请及时绑定邮箱和手机立即绑定

'闭包'和'lambda'有什么区别?

'闭包'和'lambda'有什么区别?

'闭包'和'lambda'有什么区别?有人能解释一下吗 我理解它们背后的基本概念,但我经常看到它们互换使用,我感到困惑。现在我们在这里,它们与常规功能有什么不同?
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

一个拉姆达只是一个匿名函数-没有名字定义的函数。在某些语言中,例如Scheme,它们等同于命名函数。实际上,函数定义被重写为在内部将lambda绑定到变量。在其他语言中,如Python,它们之间存在一些(相当不必要的)区别,但它们的行为方式相同。

闭合是任何功能关闭以上环境中,它被定义。这意味着它可以访问不在其参数列表中的变量。例子:

def func(): return hdef anotherfunc(h):
   return func()

这将导致错误,因为func关闭环境anotherfunch未定义。func只关闭全球环境。这将有效:

def anotherfunc(h):
    def func(): return h
    return func()

因为在这里func定义anotherfunc,并且在python 2.3和更高版本(或者像这样的一些数字)中,当它们几乎使闭包正确时(变异仍然不起作用),这意味着它关闭了 anotherfunc环境并且可以访问内部的变量。它。在Python 3.1+,突变使用时也工作nonlocal关键词

另一个重要的观点 - 即使不再被评估,func也会继续关闭anotherfunc环境anotherfunc。此代码也适用:

def anotherfunc(h):
    def func(): return h
    return funcprint anotherfunc(10)()

这将打印10。

正如您所注意到的,这与lambda无关- 它们是两个不同的(虽然相关)概念。


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 818 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信