我试图返回一个字符串,该字符串包含字典中每个对象的两个属性值及其键。每一行都是一个键和它的对象的两个属性。问题是,由于返回语句结束了函数,所以我只得到第一个键。我可以通过打印获得结果,但我需要函数来返回result.This,这是我尝试的函数:
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键.The字典中使用数字元组作为键,例如(3,0),其对象的属性是.color,可以是"noir“或”be“,.thetype是"pion”或"dame“。
如果我使用print(aemptystring + b),我会得到我想要的每个键的迭代,如下所示:
((3, 0), 'blanc', 'pion')
((5, 4), 'blanc', 'pion')
((2, 1), 'noir', 'pion')
((1, 6), 'noir', 'pion')
....etc如何获得函数来返回迭代的结果,就像打印给我的那样?我不能只使用print,因为我需要稍后使用这个函数的返回,on.The返回也需要是一个字符串。
发布于 2014-03-28 02:56:10
不要在循环中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有点奇怪。好奇:这条绳子是用来做什么的?
发布于 2014-03-28 02:59:16
您可以将结果追加到列表中,并在for循环之外返回结果列表,也可以使用名为生成器的方法,它允许函数在返回值后继续执行。
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 resulthttps://stackoverflow.com/questions/22703262
复制相似问题