我试图返回一个字符串,其中包含字典中每个对象的2个属性的值,这是它的关键。每一行都是一个键,它是对象的两个属性。问题是,由于return语句结束了函数,我只得到第一个键。我可以通过print得到结果,但我需要函数来返回结果。这是我尝试过的函数:
aemptystring = ""
for key in self.cases.keys():
a = key, self.cases[key].color, self.cases[key].thetype
b = str(a) + "\n"
result = aemptystring + b
return result
它给了我这个:
"((3, 0), 'blanc', 'pion')\n"
它仅用于1键。字典案例将数字元组作为键(3,0),其对象的属性为.color,可以是“noir”或“blanc”,而thetype是“颂“或”贵妇人“
如果我使用print(aemptystring + b)
我得到每个键的迭代,就像我想要的那样:
((3, 0), 'blanc', 'pion')
((5, 4), 'blanc', 'pion')
((2, 1), 'noir', 'pion')
((1, 6), 'noir', 'pion')
....etc
如何让函数返回打印给我的迭代结果? 我不能只使用print,因为我需要稍后使用此函数的返回。返回也需要是一个字符串。
答案 0 :(得分:1)
你可以将结果附加到列表并返回for循环之外的结果列表,或者你可以使用一个名为generator的东西,它允许你的函数在返回值后从中断处继续执行
def generate_stuff():
for key in self.cases.keys():
a = key, self.cases[key].color, self.cases[key].thetype
yield str(a) + "\n"
for result in generate_stuff():
print result
答案 1 :(得分:0)
不要在循环内return
。 :)
你几乎到了那里aemptystring
。你只需要继续添加它。
result = ""
for key in self.cases.keys():
a = key, self.cases[key].color, self.cases[key].thetype
b = str(a) + "\n"
result = result + b
return result
但重复连接字符串是二次的,所以建立一个列表然后加入它会更好。
lines = []
for key in self.cases.keys():
a = key, self.cases[key].color, self.cases[key].thetype
lines.append(str(a) + "\n")
return ''.join(lines)
你可以使用.items()
和一些字符串格式化来缩短它。
lines = []
for key, case in self.cases.items():
a = key, case.color, case.thetype
lines.append("{0!r}\n".format(a))
return ''.join(lines)
尽管如此,返回一大串Python repr
是有点奇怪的。好奇:这个字符串用于什么?