Python 一种方法是否可以通过另一种方法从生成器获取下一个值?

Python 一种方法是否可以通过另一种方法从生成器获取下一个值?,python,pandas,generator,Python,Pandas,Generator,我的get_new_point方法中有一个生成器,用于从dict中的数据帧检索数据元组。理想情况下,当我运行update_training_points方法时,它将从生成器检索下一个元组。但是,当我实际运行update_trailing_points方法时,它每次都返回相同的元组(数据帧的第一行)。我做错了什么 让我解释一下我的数据结构,因为我知道它们可能有点混乱: 所有的数据都是数据帧的dict。钥匙是“符号” 符号列表是键(符号)的列表 self.get\u new\u点返回生成器对象 ne

我的get_new_point方法中有一个生成器,用于从dict中的数据帧检索数据元组。理想情况下,当我运行update_training_points方法时,它将从生成器检索下一个元组。但是,当我实际运行update_trailing_points方法时,它每次都返回相同的元组(数据帧的第一行)。我做错了什么

让我解释一下我的数据结构,因为我知道它们可能有点混乱:

所有的数据都是数据帧的dict。钥匙是“符号”

符号列表是键(符号)的列表

self.get\u new\u点
返回生成器对象

new_point = self.get_new_point(s).__next__()
每次运行这段代码时,您都在初始化生成器。
您应该只在该对象上调用一次
self.get\u new\u point
,但多次调用
\u next\u()

发电机不是这样使用的。选中此项:

def test(n):
    for i in range(10):
        yield i

# bad: creates a new generator every time.
n = 10
for i in range(n):
    print(test(n).__next__())

# good: creates a single generator then iterates over it
n = 10
t = test(n)
for i in range(n):
    print(next(t))

FWIW,您的
获取新点可以“改进”:

建议尽可能直接使用
pandas
功能

我假设你想要一个点上的生成器。然后:

def __init__(self):
    self.__gens = None

def update_trailing_points(self):
    if self.__gens is None:
        self.__gens = {s: self.make_point_generator(s) for s in self.symbol_list}

    for s in self.symbol_list:
        try:
            new_point = next(self.__gens[s])
        except StopIteration:
            self.continue_test = False

谢谢这真的很有帮助
def make_point_generator(self, symbol):
    df = self.all_data[symbol][['timestamp', 'point']]
    yield from df.itertuples(index=False)
def __init__(self):
    self.__gens = None

def update_trailing_points(self):
    if self.__gens is None:
        self.__gens = {s: self.make_point_generator(s) for s in self.symbol_list}

    for s in self.symbol_list:
        try:
            new_point = next(self.__gens[s])
        except StopIteration:
            self.continue_test = False