繁体   English   中英

Lambda function 在另一个 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM