问题描述
我有一个问题->我想产生信息并将其放入相似的对象中。但是,似乎我将结果附加到列表后,所有内容都指向内存中的同一地址。
def call(i):
for j in range(i):
yield j+1
def ring(i):
obj = {}
for j in call(i):
obj['number'] = j
yield obj
result = []
for k in ring(5):
print(k) if k['number'] != 5 else print(k,'\n')
result.append(k)
[print(x) for x in result]
# - OUTPUT -
#
#{'number': 1}
#{'number': 2}
#{'number': 3}
#{'number': 4}
#{'number': 5}
#
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
我想我知道这里发生了什么。但是我不知道如何解决它,我真的需要带有正确值的列表。
预先感谢:-)
解决方法
哇...您使用的yield错误...为什么在保存列表时使用yield? ...您将其作为列表,然后丢弃
def call(i):
for j in range(i):
yield j+1
def ring(i):
#you define obj here
obj = {}
for j in call(i):
# if you want a different object each time instance here
# or use obj[j] = j
obj = {}
obj['number'] = j
# yield stop execution of this function and on next iteration continue from where it's left ... your return obj which is a reference to a dict
yield obj
result = []
for k in ring(5):
# print always puts \n after each call
print(k) if k['number'] != 5 else print(f"{k} is 5",'\n')
result.append(k)
[print(x) for x in result]
# - OUTPUT -
#
#{'number': 1}
#{'number': 2}
#{'number': 3}
#{'number': 4}
#{'number': 5}
#
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
我不知道您是否了解C,但是简化了您的代码,如下所示:
int* x = new int[10]
other* dict = new other
for (i=0;i<5;i++)
dict.other = i
x[i] = dict
我的代码如下: int * x =新的int [10]
for (i=0;i<5;i++)
other* dict = new other
dict.other = i
x[i] = dict