【问题标题】:Arguments passed to nested function with yield keyword使用 yield 关键字传递给嵌套函数的参数
【发布时间】:2019-12-01 11:09:29
【问题描述】:

下面的代码使用上下文管理器来确保始终执行代码“设置”和“关闭”。我无法理解 yield 关键字在这里扮演什么角色以及 bar 参数是如何声明的。

@contextmanager
def function(foo):
    # set something up

    def nestedfunction(bar):
        # do something with bar
        pass

    try:
        yield nestedfunction
    finally:
        # shut things down

函数会被如下调用

reporter = function(foo)

【问题讨论】:

  • 那么你知道什么是yield以及如何使用吗?
  • @Wonka 我想我理解在 for 循环返回生成器的上下文中使用 yield 关键字。但是我不明白它在这里的用途,它返回一个函数对象。
  • 所以当你可以使用 return 时,可能你正在使用 yield?
  • 我想我已经通过接触闭包的想法解决了我的问题,这解释了为什么没有传递任何参数geeksforgeeks.org/python-closures
  • 您查看过contextmanager 的文档吗?

标签: python function nested arguments yield


【解决方案1】:

函数会被如下调用

reporter = function(foo)

这不是真的。它是一个上下文管理器,因此可以用作:

with function(foo="foo") as reporter:
    reporter(bar="bar1")
    reporter(bar="bar2")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多