问题描述
for x in iter(int, 1): pass
- 二参数
iter
=零参数可调用+哨兵值 -
int()
总是回来0
因此,iter(int,1)
是一个无限的迭代器。显然,此特定主题有很多变体(尤其是一旦您添加lambda
到组合中)。特别注意的一个变体是iter(f,object())
,因为使用新创建的对象作为哨兵值几乎可以保证无限迭代器,而与用作第一个参数的可调用对象无关。
解决方法
是否有可以产生无限迭代器的简单表达式?
这是一个纯粹的理论问题。此处无需“实用”答案:)
例如,使用生成器表达式创建有限迭代器很容易:
my_gen = (0 for i in xrange(42))
但是,要制作无限个,我需要使用虚假函数“污染”我的命名空间:
def _my_gen():
while True:
yield 0
my_gen = _my_gen()
在单独的文件中做事,import
以后-ing不计算在内。
我也知道这itertools.repeat
完全可以做到。我很好奇是否有没有这种情况的一线解决方案。