首页 > 解决方案 > 如何重置产量和停止迭代

问题描述

我面临一些关于发电机的问题。我有一个包含 1000 个元素的列表。我想一个一个地阅读单个项目并做一些操作。该操作类似于与某个特定值进行比较。如果我能够从列表中找到该值,我想停止迭代并再次重置产量。

我正在寻找如何__next__在生成器中重置指针的功能。另外我必须在运行时制作 100 个对象FN_SOVLS

class FN_SOV1S:

    def __init__(self,elementlist,idxNo):
        self._elementlist = elementlist
        self._idxNo =idxNo
        setup()
        process()


    def setup(self):
        try:
            self.df = pd.read_excel(r'D:\OPCUA\Working_VF1.xls', sheet_name='Valve1S')
            for tag,col in self.readcmd():
                if col==4:
                    self.cmd = tag

                if col == 5:
                    self.openFB = tag

                if col == 6:
                    self.clsFB = tag

                if col == 7:
                    self.delaytime = tag

        except Exception as e:
            log_exception(e)



    def process(self):

        for tagname,tagvalue in self.searchValueBytag():
            if tagname == self.cmd:
                if tagvalue == 1:
                    sleep(self.delaytime)
                    gen.writegeneral.writenodevalue(self.openFB,1)
                    gen.writegeneral.writenodevalue(self.clsFB,0)

                else:
                    gen.writegeneral.writenodevalue(self.openFB, 0)
                    gen.writegeneral.writenodevalue(self.clsFB, 1)


    def searchValueBytag(self):
        n = 0
        while n < len(self._elementlist):
            tagname, tagvalue = self._elementlist[n]
            yield tagname, tagvalue
            n =+ 1

重置生成器功能的条件是:

 for tagname,tagvalue in self.searchValueBytag():
            if tagname == self.cmd:

标签: pythongenerator

解决方案


您不能“重置”正在运行的生成器。

可以做的是breakfor使用生成器的循环之外。

稍后您可以通过再次调用来重新创建生成器searchValueBytag


推荐阅读