Как я могу передать несколько генераторов в FunAnimation на Python?

#python #generator #subplot

#питон #генератор #подзаголовок

Вопрос:

Я хочу создать два или более подзаголовков из двух или более функций генератора, используя FuncAnimation. Мой код для создания графика из одной функции генератора выглядит следующим образом:

 from data import Data

gen = someGeneratorFunction(dataIn)

def animate(frame):
    axs.cla()
    axs.set_xticks([])
    axs.set_yticks([])
    axs.bar(list(range(Data.data_count)),  # X
            [d.value for d in frame],  # data
            1,  # width,
            color=[d.colour for d in frame],  # colour
            ).get_children()
anim = FuncAnimation(fig, animate, frames=gen, interval=1 ,repeat=False)
plt.show()
 

И то, что я пытаюсь сделать, будет выглядеть примерно так:

 gen1 = someGeneratorFunction1(dataIn)
gen2 = someGeneratorFunction2(dataIn)
 

Затем мне каким-то образом нужно было бы объединить генераторы gen1 и gen2 (которые могут иметь разную длину), прежде чем передавать их в FuncAnimation. Я пробовал использовать

 gen = zip(gen1, gen2)
 

но тогда я фактически передаю zip-объект, а не объект генератора в FuncAnimation.

Есть ли какой-нибудь способ объединить генераторы? Спасибо за любую помощь.

Комментарии:

1. Разве zip объект не является генератором? можете ли вы объяснить, почему вы не можете передать его?

2. Я не знаю, является ли zip объект генератором. На самом деле я могу передать его в FuncAnimation. Я подумал, что затем все генераторы сразу передавались в мою функцию animate, а не передавались кадр за кадром, как это обычно бывает (и, безусловно, имеет место в моем рабочем коде, где я успешно передаю только один генератор). Но я только что понял, что, возможно, ошибся. Теперь у меня есть объединенные генераторы (переменная gen ), переданные функции animate, и когда я устанавливаю точку останова, кажется, что это всего лишь один кадр на генератор.

3. Но когда я пытаюсь распаковать архив с помощью gen1, gen2= zip(*gen) , я получаю сообщение об ошибке «Ошибка значения: слишком много значений для распаковки (ожидается 2)». Я продолжу работать над этим и опубликую любой прогресс…

4. Извините, это был не вопрос (или, скорее, он был риторическим): zip является генератором и может объединять несколько генераторов в один. Кроме того, вы не можете сделать a, b = zip(*gen) (или любой генератор, если на то пошло). Генераторы не возвращают ничего вне контекста итерации.