2015-12-13 58 views
4

是否有可能在for循环中获得无限循环?Python中有无限循环可能吗?

我的猜测是Python中可以有一个无限循环。我想知道这一点为未来的参考。

+0

我一直在寻找类似的东西,发现这个:https://stackoverflow.com/questions/9884213/looping-from-1-to-infinity-in-python –

回答

4

是,使用一台发电机总是产生另一个数字: 下面是一个例子

def zero_to_infinity(): 
    i = 0 
    while True: 
     yield i 
     i += 1 

for x in zero_to_infinity(): 
    print(x) 

也可以通过突变你迭代的列表,例如实现这一点:

l = [1] 
for x in l: 
    l.append(x + 1) 
    print(x) 
+0

哦,这是有道理的!我现在将在Python中尝试一下。感谢您的快速回复 –

+0

没问题,我添加了一个演示。 – Jon

4

在Python无限循环的典型的例子是:

while True: 
    pass 

要应用这一个for循环,使用信号发生器(最简单的形式):

def infinity(): 
    while True: 
     yield 

这可以使用如下:

for _ in infinity(): 
    pass 
+2

嗯,但这是一个while循环,而不是for循环。 –

+0

啊,原谅我。我把它看作是“无限循环”。 – orokusaki

+0

这完全没问题!我欣赏它,但。现在我知道while循环可以是无限的! (: –

1

要使用一个for循环回答你的问题的要求,这会永远循环为1永远不会等于0:

for _ in iter(int, 1): 
    pass 

如果你想使用增加了按照第一回答数的无限循环,你可以使用itertools.count

from itertools import count 

for i in count(0): 
    .... 
+2

'iter(int,1)'是一种避免lambda的方法。 – DSM

+0

@DSM,是的,谢谢,确实int默认为0 –

0

虽然已经有很多答案对如何for循环无限可以做,但没有回答为何很好的例子(它没有要求,不过,但仍...)

一for Python中的循环是句法糖,用于处理迭代器的迭代器对象及其方法。例如,这是典型的for循环:

for element in iterable: 
    foo(element) 

这是什么八九不离十幕后发生的事情:

iterator = iterable.__iter__() 
try: 
    while True: 
     element = iterator.next() 
     foo(element) 
except StopIteration: 
    pass 

的重复值对象必须有,因为它可以看出,一个next方法返回一个元素并前进一次(如果可以的话,否则会引发StopIteration异常)。

因此,迭代器的next方法永远不会引发异常的每个可迭代对象都有一个无限循环。例如:

class InfLoopIter(object): 
    def __iter__(self): 
     return self # an iterator object must always have this 
    def next(self): 
     return None 

class InfLoop(object): 
    def __iter__(self): 
     return InfLoopIter() 

for i in InfLoop(): 
    print "Hello World!" # infinite loop yay!