python - 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 对象引用。我想以某种方式修复它而不改变代码结构(保持分层调用等)
解决方案
推荐阅读
- c# - C# HttpClient 连接中止
- java - 使用 BLE 从智能手表接收加速度计和陀螺仪信号
- azure - 无法将经过训练的模型部署到现有 AKS 计算目标
- java - 使用带角度的弹簧启动时出现 CORS 策略错误
- cakephp - CakePHP 3如何使用REST以正确的方式保存相关关联1:N?
- javascript - 当 pageYOffSet = 0 时隐藏导航栏
- android - 如何从反应原生应用程序创建库
- python - Python Pyodbc 二进制列返回 \xda\x08\xcd\x08\xba\x08 而不是数字
- sql - 从 SQL Server 2008 中的部分构造日期
- python - 如何在詹金斯管道的docker容器中运行python脚本