Нет, есть только одна нить.
Каждая итерация цикла for запускает вашу функцию countFrom
, пока она не выдаст что-либо или не вернет. После yield снова запускается тело цикла for, а затем, когда начинается новая итерация, функция countFrom
выбирает именно то место, где она остановилась, и запускается снова, пока не вернется (или не вернется).
Эта измененная версия вашего примера поможет вам понять, какой путь выполняется.
def countfrom(n):
while n <= 12:
print "before yield, n = ", n
yield n
n += 1
print "after yield, n = ", n
for i in countfrom(10):
print "enter for loop, i = ", i
print i
print "end of for loop iteration, i = ", i
выход
before yield, n = 10
enter for loop, i = 10
10
end of for loop iteration, i = 10
after yield, n = 11
before yield, n = 11
enter for loop, i = 11
11
end of for loop iteration, i = 11
after yield, n = 12
before yield, n = 12
enter for loop, i = 12
12
end of for loop iteration, i = 12
after yield, n = 13