首页 > 解决方案 > 是否可以保证这将是一个生成器?

问题描述

def city_generator():
    print("city gen called")
    return 1  # <--- over simplified to drive the point of the question
    yield "amsterdam"
    yield "los angeles"

>>> citygenobj = city_generator()
>>> print(citygenobj)
<generator object city_generator at 0x02CE73B0>
>>> next(citygenobj)
city gen called
Traceback (most recent call last):
  File "<pyshell#137>", line 1, in <module>
    next(citygenobj)
StopIteration: 1

问题:此函数是否充当生成器是否取决于 python 实现?或者python语言规范是否保证如果你有一个yield语句,它是一个生成器,不管它是否yield可达?

标签: pythonpython-3.xgeneratoryield

解决方案


是的,如果你有一个函数,该函数将成为一个生成器(如果无法到达yield也没关系)。yield

文档中:

Yield 表达式和语句仅在定义生成器函数时使用,并且仅在生成器函数的主体中使用。在函数定义中使用 yield 足以使该定义创建生成器函数而不是普通函数。


推荐阅读