python - 如何重置产量和停止迭代
问题描述
我面临一些关于发电机的问题。我有一个包含 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:
解决方案
您不能“重置”正在运行的生成器。
您可以做的是break
在for
使用生成器的循环之外。
稍后您可以通过再次调用来重新创建生成器searchValueBytag
。
推荐阅读
- caching - 在 Travis CI 上启用 Ivy 缓存持久性
- python - 无法安装 pip2
- angular - Angular用lambda表达式替换双重迭代
- wordpress - MAMP 显示旧版本的 Wordpress
- typescript - 如何在带有 TypeScript 的构造函数中使用它?
- node.js - 错误:Fontconfig 警告:忽略 UTF-8:不是有效的区域标签
- laravel - 在 Laravel 中使用 Vue 插件时出错:未知的自定义元素:
- ruby - ruby equal 方法总是返回参数值而不是返回值
- mysql - 为派生表选择数据时出现未知列错误
- r - igraph 对象的可变部分是什么?