是否有可能在for
循环中获得无限循环?
我的猜测是Python中可能存在无限循环。我想知道这个以供将来参考。
Python中无限循环的典型示例是:
while True:
pass
要将其应用于for循环,请使用生成器(最简单的形式):
def infinity():
while True:
yield
这可以使用如下:
for _ in infinity():
pass
要根据请求使用for循环回答您的问题,这将永远循环,因为1永远不会等于0:
for _ in iter(int, 1):
pass
如果你想使用按照第一个答案递增的数字进行无限循环,你可以使用itertools.count
:
from itertools import count
for i in count(0):
....
是的,使用始终产生另一个数字的生成器:这是一个例子
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)
import itertools
for i in itertools.count():
pass
在Python3中,range()可以更高,但不是无限:
import sys
for i in range(sys.maxsize**10): # you could go even higher if you really want but not infinity
pass
另一种方式可以
def to_infinity():
index=0
while 1:
yield index
index += 1
for i in to_infinity():
pass
虽然有很多答案可以解释如何完成无限循环,但是没有人能够回答原因(尽管如此,它仍未被问到,但仍然......)
Python中的for循环是用于处理迭代及其方法的迭代器对象的语法糖。例如,这是典型的for循环:
for element in iterable:
foo(element)
这就是幕后发生的事情:
iterator = iterable.__iter__()
try:
while True:
element = iterator.next()
foo(element)
except StopIteration:
pass
正如可以看到的那样,迭代器对象必须具有anext
method,它返回一个元素并前进一次(如果它可以,否则它会引发StopIteration异常)。
因此,迭代器的next
method永远不会引发异常的每个可迭代对象都有一个无限循环。例如:
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!
您可以将其配置为使用列表。每次迭代时都会向列表中附加一个元素,以便它永远不会结束。
例:
list=[0]
t=1
for i in list:
list.append(i)
#do your thing.
#Example code.
if t<=0:
break
print(t)
t=t/10
上面给出的这个确切的循环不会达到无穷大。但是你可以编辑if
语句来获得无限的for
循环。
我知道这可能会产生一些内存问题,但这是我能想到的最好的问题。