我正在关注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
,所以我觉得很奇怪。你能解释一下发生了什么事吗
在第一个示例中,返回一个可调用的(即lambda函数)
在第二个示例中,您正在调用函数
nolambda
,这意味着make_incrementor
的返回值将与nolambda
返回的值相同为了更好地理解,请尝试这样看:
在第一个示例中,返回
lambda x: x + n
,返回的是一个匿名函数,无需调用–它将输入参数n
映射到lambda
函数,但仍保持未调用状态。在第二个函数中,您返回一个调用的函数,因为您实际上是在make_incrementor
函数体中用括号调用的在这段代码中,lambda函数“看到”参数
x
和变量n
,它位于lambda的闭包中:在另一个示例中,您有三个不同之处,它们会导致不同的行为:
nolambda
放置在make_incrementor
函数之外,因此它没有闭包nolambda
的结果lambda
返回x + n
,而nolambda
只返回x
以下内容与lambda的示例相同:
相关问题 更多 >
编程相关推荐