首页 > 解决方案 > Python - 使用输入参数链接生成器

问题描述

我必须多次执行生成器函数并链接结果。问题是这个函数有输入对象参数,每次运行都不同。最后,不幸的是,当我循环查找结果时,这个参数在每个结果中都是相同的。我认为这段代码会更清楚:

import itertools

class Data:
  def __init__(self, constant, fruit=None, color=None):
    self.constant = constant
    self.fruit = fruit
    self.color = color

def get_generator(data):
    for i in range(1, 3):
        yield [i, data]

def for_colors(data):
  colors = ['blue', 'red']
  result = iter(())

  for color in colors:
    data.color = color
    result = itertools.chain(result, get_generator(data))

  return result


def for_friuts(data):
  fruits = ['apple', 'orange']
  result = iter(())

  for fruit in fruits:
    data.fruit = fruit
    result = itertools.chain(result, for_colors(data))
  
  return result


def run():
  data = Data('constant')
  return for_friuts(data)

for item in run():
  print(f'{item[0]} {item[1].constant} {item[1].fruit} {item[1].color}')

返回的内容:

1 constant orange red
2 constant orange red
1 constant orange red
2 constant orange red
1 constant orange red
2 constant orange red
1 constant orange red
2 constant orange red

预期:

1 constant apple red
2 constant apple blue
1 constant apple red
2 constant apple blue
1 constant orange red
2 constant orange blue
1 constant orange red
2 constant orange blue

结果,每个项目中都有相同的 Data 对象引用。我想以某种方式修复它而不改变代码结构(保持分层调用等)

标签: pythongenerator

解决方案


推荐阅读