Я хотел бы функцию, is_just_started
, который ведет себя как следующее:Как я могу узнать, был ли только что запущен генератор?
>>> def gen(): yield 0; yield 1
>>> a = gen()
>>> is_just_started(a)
True
>>> next(a)
0
>>> is_just_started(a)
False
>>> next(a)
1
>>> is_just_started(a)
False
>>> next(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> is_just_started(a)
False
Как я могу реализовать эту функцию?
Я просмотрел атрибут .gi_running
, но, похоже, он используется для чего-то другого.
Если я знаю, первое значение, которое должно быть отправлено в генератор, я могу сделать что-то вроде этого:
def safe_send(gen, a):
try:
return gen.send(a)
except TypeError as e:
if "just-started" in e.args[0]:
gen.send(None)
return gen.send(a)
else:
raise
Однако, это кажется отвратительным.
Это позволило изменить внутри самого генератора? Разрешено ли его украшать? – wim
похоже, что 'gi_running' указывает, что интерпретатор на самом деле в настоящий момент запускает код, поэтому он имеет значение false между итерациями. –
Возможный дубликат. [Есть ли функция Python, которая проверяет, запущен ли генератор?] (Http://stackoverflow.com/questions/17684908/is-there-a-python-function-that-checks-if-a-generator-is-started) –