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