如何解决“闭包”和“lambda”有什么区别?
只是一个匿名函数 - 一个没有名称定义的函数。在某些语言中,例如 Scheme,它们等价于命名函数。实际上,函数定义被重写为在内部将 lambda 绑定到变量。在其他语言中,例如 Python,它们之间存在一些(相当不必要的)区别,但它们的行为方式相同。
*
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
‘s 环境并可以访问内部的变量它。在 Python 3.1+
中,突变在使用关键字nonlocal
时也有效。
另一个重要的一点 -func
将继续关闭 overanotherfunc
的环境,即使它不再在anotherfunc
. 此代码也将起作用:
def anotherfunc(h):
def func(): return h
return func
print anotherfunc(10)()
这将打印 10。
s无关——它们是两个不同(尽管相关)的概念。
解决方法
有人可以解释一下吗?我了解它们背后的基本概念,但我经常看到它们可以互换使用,我感到困惑。
既然我们在这里,它们与常规函数有何不同?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。