<p>给你</p>
<pre><code>class ImageSeries:
def __init__(self):
self._xy_tasks = None
self._z_tasks = None
def xy(self, position):
print(position)
yield "xy"
def z(self, position):
print(position)
yield "z"
def xy_scan(self, positions):
self._xy_tasks = lambda: (self.xy(pos) for pos in positions)
def z_scan(self, positions):
self._z_tasks = lambda: (self.z(pos) for pos in positions)
def run(self):
for xy_generator in self._xy_tasks():
next(xy_generator)
for z_generator in self._z_tasks():
next(z_generator)
def __repr__(self):
return str(self._xy_tasks()) + " " + str(self._z_tasks())
if __name__ == "__main__":
s = ImageSeries()
positions = [[0, 0], [100, 100], [1000, 1000]]
s.xy_scan(positions)
s.z_scan([0, 100, 1000, 10000])
s.run()
</code></pre>
<p>做了一些事情:</p>
<ol>
<li>调用<code>run()</code></li>
<li>self.tasks作为一个列表没有意义,因为每个单元格都有不同的含义,所以我将其分为两个单独的成员变量</李>
<li>主要的事情是确保在每次运行时都会再次创建生成器,因为它无法重置。我通过使用lambda实现了这一点,因此您可以调用每次都创建生成器的函数,而不是生成器本身。请注意<code>self._xy_tasks()</code>。这将调用创建生成器的函数</李>
</ol>