Генераторы
День добрый.
Есть вот такой код:
Результат:
5
2
1
0
Объясните пожалуйста, почему он не выводит 3? Ведь после установки newvalue в 3 на следующем цикле как раз n равно трем. Почему это значение не возвращается?
UPD Поскольку возникли сомнения, выкладываю источник
Код взят со страницы http://www.dabeaz.com/coroutines/
Сам файл - http://www.dabeaz.com/coroutines/bogus.py
Презентация - http://www.dabeaz.com/coroutines/Coroutines.pdf (слайд №32)
Почему этот код на разных машинах выводит разную последовательность - я так и не понял :( . Я проверял на
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 и
Python 2.5 (release25-maint, Dec 9 2006, 14:35:53) [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)] on linux2
Оба раза тройка была пропущена
Есть вот такой код:
# bogus.py
#
# Bogus example of a generator that produces and receives values
def countdown(n):
print "Counting down from", n
while n >= 0:
newvalue = (yield n)
# If a new value got sent in, reset n with it
if newvalue is not None:
n = newvalue
else:
n -= 1
# The holy grail countdown
c = countdown(5)
for x in c:
print x
if x == 5:
c.send(3)Результат:
5
2
1
0
Объясните пожалуйста, почему он не выводит 3? Ведь после установки newvalue в 3 на следующем цикле как раз n равно трем. Почему это значение не возвращается?
UPD Поскольку возникли сомнения, выкладываю источник
Код взят со страницы http://www.dabeaz.com/coroutines/
Сам файл - http://www.dabeaz.com/coroutines/bogus.py
Презентация - http://www.dabeaz.com/coroutines/Coroutines.pdf (слайд №32)
Почему этот код на разных машинах выводит разную последовательность - я так и не понял :( . Я проверял на
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 и
Python 2.5 (release25-maint, Dec 9 2006, 14:35:53) [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)] on linux2
Оба раза тройка была пропущена
