首页 > 解决方案 > 在 python 中使用生成器函数访问输出的问题

问题描述

我有下面的代码,我需要一次使用从 CSV 文件中检索到的数据的一个元组执行一些操作,然后在再次调用 step 函数时移动到下一个元组。我不明白如何使用 obs 变量。当我检索时,我得到一个生成器对象。非常感谢您的帮助。

  def get_state(self):
    def createGenerator(self):
     obs_data = [tuple(x) for x in self.data[['value_1']], 
           'value_2']].to_numpy()]
     for obs in obs_data:
        yield obs

  def step(self):
    ob = self.get_state()

标签: pythonpython-3.xiteratorgeneratoryield

解决方案


  1. 你没有在外部方法中返回任何东西,只有内部生成器函数。
  2. 您永远不会调用内部函数来实际创建生成器。

我无法准确说出您的要求,但这里有可以运行的代码:

def get_state(self):
    def createGenerator():
       obs_data = [tuple(x) for x in self.data[['value_1']], 
           'value_2']].to_numpy()]
       for obs in obs_data:
          yield obs
    if self.gen is None:
        self.gen = createGenerator()
    return next(self.gen)

def step(self):
    ob = self.get_state()

您应该使用next()来获取值,或者您可以使用 for 循环并将生成器视为可迭代的。


推荐阅读