【问题标题】:Which data do returned functions in python have acess to?python中返回的函数可以访问哪些数据?
【发布时间】:2021-10-28 01:30:43
【问题描述】:

假设我们要创建一个回调函数,它将两个数字 arg1arg2 相加。这可以通过返回一个函数引用来完成,如下所示:

def add(arg1, arg2):
   return arg1 + arg2

def partial(f, arg1, arg2):
   def wrapper():
      return f(arg1, arg2)
  
   return wrapper

callback = partial(add, 2, 4)
print(callback())

Output: 6

wrapper 如何记住arg1arg2?我们用return wrapper 真正返回了什么?似乎不仅是返回的函数代码的一部分,而且还有它的环境(在这种情况下,变量定义在wrapper 之前)。否则会有NameError

【问题讨论】:

标签: python function callback nested partials


【解决方案1】:

回答您的主要问题,这是因为 python 中称为 Closure 的东西。 当您将函数嵌套在封闭函数中并返回嵌套函数时,传递给封闭函数的变量仍然在嵌套函数的范围内。

您经常会看到在 python 中使用闭包来创建装饰器。

【讨论】:

  • 不只是变量,就像这里一样。 partiallocals() 中的任何内容,例如 partial 中的预计算值对 wrapper 都是可见的。 (虽然我认为它仅限于本地人之前 def wrapper 行)
  • @JLPeyret 它不限于这种方式,您可以在 仍然关闭的包装函数定义之后拥有新的本地人。
猜你喜欢
  • 2019-02-05
  • 2016-02-20
  • 2011-08-07
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多