Infinite for loops possible in Python?

后端 未结 10 2173
误落风尘
误落风尘 2020-12-06 10:39

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 refe

相关标签:
10条回答
  • 2020-12-06 11:17

    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
    
    0 讨论(0)
  • 2020-12-06 11:20

    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
    
    0 讨论(0)
  • 2020-12-06 11:20
    n = 0
    li = [0]
    for i in li:
        n += 1
        li.append(n)
        print(li)
    

    In the above code, we iterate over the list (li).

    • So in the 1st iteration, i = 0 and the code in for block will run, that is li will have a new item (n+1) at index 1 in this iteration so our list becomes [ 0, 1 ]
    • Now in 2nd iteration, i = 1 and new item is appended to the li (n+1), so the li becomes [0, 1, 2]
    • In 3rd iteration, i = 2, n+1 will be appended again to the li, so the li becomes [ 0, 1, 2, 3 ]

    This will keep on going as in each iteration the size of list is increasing.

    0 讨论(0)
  • 2020-12-06 11:21

    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 :)

    0 讨论(0)
  • 2020-12-06 11:23

    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!
    
    0 讨论(0)
  • 2020-12-06 11:26
    my_list = range(10)
    
    for i in my_list:
        print ("hello python!!")
        my_list.append(i)
    
    0 讨论(0)
提交回复
热议问题