def iterit():
for i in range(5):
yield i
print 10
def test_iter():
for i in iterit():
print i
print '--'
for i in iterit():
print i
0
1
2
3
4
10
--
0
1
2
3
4
10
def iterit():
for i in range(5):
yield i
print 10
def test_iter():
for i in iterit():
print i
print '--'
for i in iterit():
print i
0
1
2
3
4
10
--
0
1
2
3
4
10
Андрей СветловВроде начало доходить. правильно ли, что когда внутри iterit() кончился цикл, и значений для генератора больше нет. То на следующий запрос, значения питон обрабатывает строку print 10 и дальше возникает исключение StopIteration. То есть в конце функции-генератора можно отпустить ресурсы, мне например надо закрыть соединение с базой
Первый цикл бежит, пока генератор iterit не закончится.
А чем этот генератор кончается?
ЮрчекОно само по себе не возникает, на это тонко намекал Андрей Светлов
Вроде начало доходить. правильно ли, что когда внутри iterit() кончился цикл, и значений для генератора больше нет. То на следующий запрос, значения питон обрабатывает строку print 10 и дальше возникает исключение StopIteration.
. Each time the .next() method of a generator-iterator is invoked, the
code in the body of the generator-function is executed until a yield
or return statement (see below) is encountered, or until the end of
the body is reached.
>>> def f():
... if False:
... yield 1
... print('a')
...
>>> for i in f():
... print(i)
...
a
>>>
py.user.nextНу дык правильно, о том и разговор, до конца тела генератора еще есть print, который и выполняется. Интерпретатор же не может магическим образом узнать, что программист добавил print, но хочет, чтобы StopIteration возник перед ним =)
возникает оно в конце функции