在开始使用C学习代码之后,我一直认为for-循环和while-循环本质上都是等价的(在其中一个循环中,只使用另一个循环就可以再现其中一个循环的行为)。但是在python中,虽然从for循环到while循环总是很简单,但我找不到实现相反的方法。
,在python中,是否有任何方法可以仅使用for-循环?来再现时间循环(无限循环)的行为?
下面是一个使用递归生成器(因为递归限制)无法工作的解决方案:
def infinite_loopy():
yield "All work and no play makes Jack a dull boy"
for x in infinite_loopy():
yield x
#here starts the supposedly infinite-loop
for x in infinite_loopy():
print(x)
发布于 2016-08-24 12:42:51
发布于 2016-08-24 13:24:09
您可以使用iter
的两个参数版本,如下所示:
for _ in iter(int, 1):
print('All your loops are belong to us!')
iter
的2参数形式将第一个参数作为没有参数的函数调用。如果返回的值等于(==
)第二个参数,则会引发StopIteration
,否则将产生返回值。不带参数调用的int()
返回0
,这当然不等于1
,从而永远产生0,而且我们有一个无限循环。
发布于 2016-08-24 12:41:55
您可以使用itertools.repeat
、count
或cycle
import itertools
for _ in itertools.repeat(None):
# infinite loop
for _ in itertools.count():
# infinite loop
for _ in itertools.cycle([None]):
# infinite loop
所有这些都可以用while
循环来表示,但是itertools
模块是用c
(在cPython中)实现的,而在源代码中不使用while
循环。同样适用于jython (java),甚至PyPy (蟒蛇)。count
和cycle
也是如此。
https://stackoverflow.com/questions/39123449
复制相似问题