我试图创建一个ImageSeries
对象,在这个对象中,我希望以某种模式检索图像(对于xy中的每个值,以及z中的每个值),我调用将生成器附加到任务列表的方法,并通过两个for循环来运行生成器
但是,我的第二个任务在第一个任务的第一次迭代之后就耗尽了精力,这不是我想要的结果。我希望第二个任务运行第一个任务的每个迭代
我想知道是否有有效的方法来编程这样的模式
class ImageSeries:
tasks = []
def xy(self, position):
print(position)
yield "xy"
def z(self, position):
print(position)
yield "z"
def xy_scan(self, positions):
self.tasks.append((self.xy(pos) for pos in positions))
def z_scan(self, positions):
self.tasks.append((self.z(pos) for pos in positions))
def run(self):
for i in self.tasks[0]:
next(i)
for j in self.tasks[1]:
next(j)
def __repr__(self):
return str(self.tasks)
if __name__ == "__main__":
s = ImageSeries()
positions = [[0, 0], [100, 100], [1000, 1000]]
s.xy_scan(positions)
s.z_scan([0, 100, 1000, 10000])
电流输出:
[0, 0]
0
100
1000
10000
[100, 100]
[1000, 1000]
预期产出:
>>> s.run()
[0, 0]
0
100
1000
10000
[100, 100]
0
100
1000
10000
[1000, 1000]
0
100
1000
10000
给你
做了一些事情:
run()
self._xy_tasks()
。这将调用创建生成器的函数李>生成器不知道它们是嵌套的。发电机第一次耗尽后,就结束了。事实上,在这种情况下,您不需要生成器,因为当您迭代一个不希望存储在内存中的长列表时,它们会起作用。但在这里,你必须把所有重复的序列存储在内存中。只能在上层回路中使用生成器。但只有当它真的很长并且从某条溪流中获得时,它才有意义。如果它已经在内存中,那么实际上不需要生成器。你想要的一切都可以做得简单得多
如果您需要它是一个类,只需使用
xy_scan
、z_scan
保存到self.xy_list
、self.z_list
并使用相同的for
循环inrun
方法(只需将self.
添加到xy_list
和z_list
)相关问题 更多 >
编程相关推荐