为什么xrange能回到Python的开始?

我遇到这个代码从Most pythonic way of counting matching elements in something iterable

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的行为不同?

因为通过调用xrange()产生的xrange对象指定了一个__iter__,它在每次迭代时都提供了一个唯一的版本本身(实际上是一个单独的rangeiterator对象)。

>>> x = xrange(3)
>>> type(x)
<type 'xrange'>
>>> i = x.__iter__()
>>> type(i)
<type 'rangeiterator'>
http://stackoverflow.com/questions/10776250/why-is-xrange-able-to-go-back-to-beginning-in-python

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么xrange能回到Python的开始?