Я использую python 3.5. Когда я попытался вернуть экземпляр функции генератора, и я получаю ошибку StopIteration. Зачем?Невозможно вернуть экземпляр генератора. Зачем?
вот мой код:
>>> def gen(start, end):
... '''generator function similar to range function'''
... while start <= end:
... yield start
... start += 1
...
>>> def check(ingen, flag=None):
... if flag:
... for n in ingen:
... yield n*2
... else:
... return ingen
...
>>> # Trigger else clause in check function
>>> a = check(gen(1,3))
>>> next(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration: <generator object gen at 0x7f37dc46e828>
Похоже, что генератор как-то исчерпал до пункта остальное возвращает генератор.
Он отлично работает с этой функцией:
>>> def check_v2(ingen):
... return ingen
...
>>> b = check_v2(gen(1, 3))
>>> next(b)
1
>>> next(b)
2
>>> next(b)
3
@martineau это прекрасно в Python 3 – wroniasty
@wroniasty: Из того, что я только что прочитал, это прекрасно только в Python 3.3+ – martineau