函数中的Lambda

2024-09-30 20:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在关注Pythontutorial

def make_incrementor(n):
    return lambda x: x + n

结果:

f = make_incrementor(42)
print(f(1))
43
print(type(f))
<class 'function'>
现在我们将用正则函数

替换lambda表达式。
def nolambda(x):
    return x

def make_incrementor(n):
    return nolambda(n)

f = make_incrementor(42)    
print(type(f))
<class 'int'>

在第一种情况下,它返回<class 'function'>,但在第二种情况下,它返回<class 'int'>

在第一种情况下,它只指向lamba表达式,不执行它(好的,由于缺少参数,它将引发错误)。我可以理解,但是在第二个例子中,它返回的是int,而不是function,所以我觉得很奇怪。你能解释一下发生了什么事吗


Tags: lambdamakereturn表达式deftype情况function
3条回答

在第一个示例中,返回一个可调用的(即lambda函数)

在第二个示例中,您正在调用函数nolambda,这意味着make_incrementor的返回值将与nolambda返回的值相同

为了更好地理解,请尝试这样看:

def make_incrementor(n):
    some_function = lambda x: x+n
    return some_function

def make_incrementor(n):
    some_return_value = nolambda(n)
    return some_return_value

在第一个示例中,返回lambda x: x + n,返回的是一个匿名函数,无需调用–它将输入参数n映射到lambda函数,但仍保持未调用状态。在第二个函数中,您返回一个调用的函数,因为您实际上是在make_incrementor函数体中用括号调用的

在这段代码中,lambda函数“看到”参数x和变量n,它位于lambda的闭包中:

def make_incrementor(n):
    return lambda x: x + n

在另一个示例中,您有三个不同之处,它们会导致不同的行为:

  • 您将函数nolambda放置在make_incrementor函数之外,因此它没有闭包
  • 在第一个示例中,返回函数本身(即lambda,它是一个函数),在第二个示例中返回nolambda的结果
  • lambda返回x + n,而nolambda只返回x

以下内容与lambda的示例相同:

def make_incrementor(n):

    def nolambda(x):
        return x + n

    return nolambda

相关问题 更多 >