调用包含yield的函数

问题描述 投票:1回答:1

我阅读了here以下示例:

>>> def double_inputs():
...     while True:      # Line 1
...         x = yield    # Line 2
...         yield x * 2  # Line 3
...
>>> gen = double_inputs()
>>> next(gen)       # Run up to the first yield
>>> gen.send(10)    # goes into 'x' variable

如果我正确理解了以上内容,似乎意味着Python实际上要等到next(gen)才“运行”到函数主体中的Line 2。换句话说,解释器将not开始执行函数的主体,直到我们调用next

  1. 实际上正确吗?
  2. 据我所知,Python不会进行AOT编译,除了解析代码并确保它是有效的Python之外,它“不会超前”。它是否正确?
  3. [如果以上为真,当我调用double_inputs()时,Python将如何知道它需要等到我调用next(gen)才能进入循环while True
python python-3.x generator abstract-syntax-tree yield
1个回答
1
投票

正确。调用double_inputs永远不会执行任何代码。它只是返回一个generator对象。当yield语句为parsed时发现的def表达式在正文中的存在会更改def语句的语义,以创建generator对象而不是function对象。

© www.soinside.com 2019 - 2024. All rights reserved.