模仿while循环在python中仅使用for循环

jad*_*dsq 2 python loops for-loop while-loop

在开始用C语言学习代码之后,我总是假设for循环和while循环,其中essentialy总是等价的(因为在一个中总是可以重现只使用另一个的行为).但是在python中从for循环到while循环总是微不足道的,我找不到实现反转的方法.

在python中,有没有办法只使用for循环来重现while循环(无限循环)的行为?

这是一个使用递归生成器不起作用的解决方案(因为递归限制):

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)
Run Code Online (Sandbox Code Playgroud)

Ami*_*ory 5

您可以通过编写yield迭代器类来完成此操作:

class Infinite(object):
    def __iter__(self):
        return self

    def next(self): # For Python3, replace this with __next__
        return 1

# Loops forever
for i in Infinite():
    pass
Run Code Online (Sandbox Code Playgroud)

(如果你有耐心的话,你可以看到它在想法停滞不前 - 这就像看油漆一样干燥).


Ant*_*ala 5

您可以使用iter如下的双参数版本:

for _ in iter(int, 1):
    print('All your loops are belong to us!')
Run Code Online (Sandbox Code Playgroud)

2参数形式iter将第一个参数调用为没有参数的函数.如果返回的值等于(==)第二个参数,StopIteration则引发,否则返回返回值.int()在没有参数的情况下调用返回0,这当然不等于1永远地产生0,并且我们有一个无限循环.