Я столкнулся с этим кодом из Большинство pythonic способов подсчета совпадающих элементов в чем-то итерабельном
r = xrange(1, 10)
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 3
r повторяется один раз. и затем снова повторили. Я подумал, что если итератор один раз потребляется, тогда он снова и снова не должен повторяться.
Выражения генератора могут повторяться только один раз:
r = (7 * i for i in xrange(1, 10))
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 0
перечисление (L) тоже:
r = enumerate(mylist)
и объект файла:
f = open(myfilename, 'r')
Почему xrange ведет себя по-другому?