Chciałbym funkcję, is_just_started
, która zachowuje się jak następuje:Jak mogę sprawdzić, czy generator został właśnie uruchomiony?
>>> 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
Jak mogę wdrożyć tę funkcję?
Spojrzałem na atrybut .gi_running
, ale wydaje się, że jest on używany do czegoś innego.
Jeśli wiem pierwszą wartość, która musi zostać wysłana do generatora, można zrobić coś takiego:
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
to jednak wydaje się odrażające.
Czy wolno modyfikować wewnątrz samego generatora? Czy wolno to udekorować? – wim
Wygląda na to, że 'gi_running' wskazuje, że interpreter aktualnie działa, więc jest fałszywe między iteracjami. –
Możliwy duplikat [Czy istnieje funkcja Pythona, która sprawdza, czy generator jest uruchomiony?] (Http://stackoverflow.com/questions/17684908/is-there-a-python-function-that-checks-if-a-generator-is-start) –