Redo for loop iteration in Python

前端 未结 6 1427
灰色年华
灰色年华 2020-12-10 04:07

Does Python have anything in the fashion of a \"redo\" statement that exists in some languages?

(The \"redo\" statement is a statement that (just like \"break\" or \

6条回答
  •  悲&欢浪女
    2020-12-10 04:26

    This is my solution using iterators:

    class redo_iter(object):
        def __init__(self, iterable):
            self.__iterator = iter(iterable)
            self.__started = False
            self.__redo = False
            self.__last = None
            self.__redone = 0
        def __iter__(self):
            return self
        def redo(self):
            self.__redo = True
        @property
        def redone(self):
            return self.__redone
        def __next__(self):
            if not (self.__started and self.__redo):
                self.__started = True
                self.__redone = 0
                self.__last = next(self.__iterator)
            else:
                self.__redone += 1
            self.__redo = False
            return self.__last
    
    
    # Display numbers 0-9.
    # Display 0,3,6,9 doubled.
    # After a series of equal numbers print --
    iterator = redo_iter(range(10))
    for i in iterator:
        print(i)
        if not iterator.redone and i % 3 == 0:
            iterator.redo()
            continue
        print('---')
    
    • Needs explicit continue
    • redone is an extra feature
    • For Python2 use def next(self) instead of def __next__(self)
    • requires iterator to be defined before the loop

提交回复
热议问题