如何使用带有装饰函数和生成器的Python类型提示?

时间:2017-10-26 22:22:08

标签: python decorator static-typing

假设我使用twisted' s defer.inlineCallbacks获得以下代码:

from twisted.internet import defer, reactor

def main() -> None:
    reactor.callWhenRunning(
        lambda: main_task().addBoth(
            lambda _: reactor.stop()))
    reactor.run()

@defer.inlineCallbacks
def main_task():
    data = yield fetch_a_lot_of_data()
    yield write_data_to_disk(data)
    defer.returnValue(None)

if __name__ == "__main__":
    main()

main_task的正文不会返回任何内容,但main_task实际上会返回一个生成defer.Deferred个对象的生成器... @defer.inlineCallbacks装饰器用来代替函数返回另一个defer.Deferred对象

那么我应该如何注释main_task的返回值?

  • def main_task() -> None:,任务的结果?
  • def main_task() -> Generator[defer.Deferred, object, None]:,main_task的返回值,如果它没有装饰器吗?
  • def main_task() -> defer.Deferred:,装饰函数的返回值?

......或其他完全不同的东西?

0 个答案:

没有答案