[英]Lambda function in another function
我是 Python 的新手,我想了解这个 function 是如何工作的:
def myfunc(n):
return lambda a : a * n
mytripler = myfunc(3)
print(mytripler(11))
所以我将 3 传递给 myfunc 并得到 3a 作为返回值。 我不明白我作为参数从 mytripler function 发送的值 11 如何与 myfunc 相关。 当我尝试像这样编写 function 时,我无法得到相同的结果:
def myfunc(n, a):
return lambda a : a * n
print (myfunc(11, 3))
有人可以解释一下吗?
为了确保您更好地理解它,让我们重写您的示例并在每个步骤中查看 output:
def myfunc(n):
return lambda a : a * n
mytripler = myfunc(3)
type_of_mytripler=type(myfunc(3))
print(f'after the first call, you get {mytripler=} with {type_of_mytripler=}')
result=mytripler(11)
type_of_result=type(mytripler(11))
print(f'after the second call, you get {result=} with {type_of_result=}')
您会得到以下 output:
after the first call, you get mytripler=<function myfunc.<locals>.<lambda> at 0x7fd196415940> with type_of_mytripler=<class 'function'>
after the second call, you get result=33 with type_of_result=<class 'int'>
33
如您所见,在第一次调用期间,您实际上返回了lambda
function。 之后,您必须将新的 arg 传递给您的 function 以执行它并获得最终结果。 您还可以将示例重写为result=myfunc(3)(11)
以实现相同的结果。
总而言之,请记住,在 Python 中,函数也是对象。 也就是说,您既可以将它们作为 arguments 传递给其他函数,也可以将它们返回。 显然,除非您使用圆括号执行它,否则您无法从 function 本身获得最终结果。 您有效创建的是返回 function 的 function。
检查Python 中的主题装饰器,现在可能有点复杂,但应该让您大致了解将函数作为对象传递/返回。 这篇 Real Python 文章很好地介绍了这个主题。 现在,您可能会发现几段关于 Python 中最有用的功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.