有人可以解释一下吗?
现在我们已经到了这里,它们与常规函数有何不同?
答案
Aλ只是一个匿名函数 - 一个没有名称定义的函数。
A关闭 是任何函数结束 这环境其中定义了它。
def func(): return h
def anotherfunc(h):
return func()
这会导致错误,因为func
才不是关闭 环境在anotherfunc
-h
未定义。func
仅关闭全球环境。
def anotherfunc(h):
def func(): return h
return func()
因为在这里,func
定义于anotherfunc
,并且在 python 2.3 及更高版本(或类似这样的数字)中,当它们几乎 闭包正确(突变仍然不起作用),这意味着它结束 anotherfunc
的环境并可以访问其中的变量。这nonlocal
关键词。
另一个重要的一点——func
将继续关闭anotherfunc
的环境,即使它不再被评估anotherfunc
。
def anotherfunc(h):
def func(): return h
return func
print anotherfunc(10)()
这将打印 10。
正如您所注意到的,这与拉姆达s - 它们是两个不同(尽管相关)的概念。