如果只是创建了一个迭代对象(实例),它不会事先把无限个元素生成出来,事实上也不可能在内存中创建无限多个元素。
无限序列只有在for
迭代时才会无限地迭代下去,例如
>>> import itertools
>>> natuals = itertools.count(1) #创建迭代对象,但并未生成实际的元素
>>> for n in natuals:
... print n
...
1
2
3
...
>>> import itertools
>>> cs = itertools.cycle('ABC') #<span style="font-family: Arial, Helvetica, sans-serif;">创建迭代对象,但并未生成实际的元素</span>
>>> for c in cs:
... print c
...
'A'
'B'
'C'
'A'
'B'
'C'
...
无限序列虽然可以无限迭代下去,但是通常我们会通过
takewhile()
等函数根据条件判断来截取出一个有限的序列:
>>> natuals = itertools.count(1)
>>> ns = itertools.takewhile(lambda x: x <= 10, natuals)
>>> for n in ns:
... print n
...
打印出1到10