gpt4 book ai didi

function - 'closure' 和 'lambda' 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 10:01:24 27 4
gpt4 key购买 nike

有人能解释一下吗?我理解它们背后的基本概念,但我经常看到它们互换使用,我感到很困惑。

现在我们已经到了这里,它们与常规函数有何不同?

最佳答案

lambda 只是一个匿名函数 - 一个没有名称定义的函数。在某些语言中,例如Scheme,它们相当于命名函数。事实上,函数定义被重写为在内部将 lambda 绑定(bind)到变量。在其他语言中,例如 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 的环境并可以访问其中的变量。在 Python 3.1+ 中,使用 the nonlocal keyword 时突变也起作用。 .

另一个重要点 - func 将继续关闭 anotherfunc 的环境,即使它不再在 anotherfunc 中进行评估。此代码也将起作用:

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

print anotherfunc(10)()

这将打印 10。

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

关于function - 'closure' 和 'lambda' 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com