'闭包'和'lambda'有什么区别?有人能解释一下吗 我理解它们背后的基本概念,但我经常看到它们互换使用,我感到困惑。现在我们在这里,它们与常规功能有什么不同?
3 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
一个拉姆达只是一个匿名函数-没有名字定义的函数。在某些语言中,例如Scheme,它们等同于命名函数。实际上,函数定义被重写为在内部将lambda绑定到变量。在其他语言中,如Python,它们之间存在一些(相当不必要的)区别,但它们的行为方式相同。
甲闭合是任何功能关闭以上的环境中,它被定义。这意味着它可以访问不在其参数列表中的变量。例子:
def func(): return hdef anotherfunc(h): return func()
这将导致错误,因为func
未关闭环境anotherfunc
- h
未定义。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无关- 它们是两个不同的(虽然相关)概念。
添加回答
举报
0/150
提交
取消