Infinite for loops possible in Python?

青春壹個敷衍的年華 提交于 2019-12-19 02:34:38

问题


Is it possible to get an infinite loop in for loop?

My guess is that there can be an infinite for loop in Python. I'd like to know this for future references.


回答1:


The quintessential example of an infinite loop in Python is:

while True:
    pass

To apply this to a for loop, use a generator (simplest form):

def infinity():
    while True:
        yield

This can be used as follows:

for _ in infinity():
    pass



回答2:


To answer your question using a for loop as requested, this would loop forever as 1 will never be equal to 0:

for _ in iter(int, 1):
    pass

If you wanted an infinite loop using numbers that were incrementing as per the first answer you could use itertools.count:

from itertools import count

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



回答3:


Yes, use a generator that always yields another number: Here is an example

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

for x in zero_to_infinity():
    print(x)

It is also possible to achieve this by mutating the list you're iterating on, for example:

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



回答4:


Using itertools.count:

import itertools
for i in itertools.count():
    pass

In Python3, range() can go much higher, though not to infinity:

import sys
for i in range(sys.maxsize**10):  # you could go even higher if you really want but not infinity
    pass

Another way can be

def to_infinity():
    index=0
    while 1:
        yield index
        index += 1

for i in to_infinity():
    pass



回答5:


Why not try itertools.count?

import itertools
for i in itertools.count():
    print i

which would just start printing numbers from 0 to ...

Try it out.

**I realize I'm a couple of years late but it might help someone else :)




回答6:


While there have been many answers with nice examples of how an infinite for loop can be done, none have answered why (it wasn't asked, though, but still...)

A for loop in Python is syntactic sugar for handling the iterator object of an iterable an its methods. For example, this is your typical for loop:

for element in iterable:
    foo(element)

And this is what's sorta happening behind the scenes:

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

An iterator object has to have, as it can be seen, anextmethod that returns an element and advances once (if it can, or else it raises a StopIteration exception).

So every iterable object of which iterator'snextmethod does never raise said exception has an infinite for loop. For example:

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!



回答7:


You can configure it to use a list. And append an element to the list everytime you iterate, so that it never ends.

Example:

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

This exact loop given above, won't get to infinity. But you can edit the if statement to get infinite for loop.

I know this may create some memory issues, but this is the best that I could come up with.




回答8:


Here's another solution using the itertools module.

import itertools

for _ in itertools.repeat([]): # return an infinite iterator
    // do work



回答9:


my_list = range(10)

for i in my_list:
    print ("hello python!!")
    my_list.append(i)


来源:https://stackoverflow.com/questions/34253996/infinite-for-loops-possible-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!