如何作为字符串返回键上的迭代?

时间:2014-03-28 02:47:17

标签: python

我试图返回一个字符串,其中包含字典中每个对象的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,因为我需要稍后使用此函数的返回。返回也需要是一个字符串。

2 个答案:

答案 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是有点奇怪的。好奇:这个字符串用于什么?