-2

每当我发出命令时,如何使用__str__打印字典存储的数据。print我在用:

def __str__(self):
    for atom in self.pdb_atoms().keys():
        return '%s'%self.pdb_atoms()[atom]

如果我在 python 中有一个字典,它的索引有一个字符串和一个整数,比如{ 'CA' 56: 'ATOM 727 HG2 57 -7.010000 11.418000 -23.532000'....}

但这给了我对应于单个键而不是整个列表的数据;这仅打印 1344 行列表中的第 727 行。我不知道,我哪里错了。pdb_atoms是字典的名称

4

4 回答 4

1

您认为return循环中可能意味着什么?__str__必须返回一个字符串。如果您的函数按预期工作,它会为每个原子返回一个字符串......然后呢?Python 应该如何知道如何在你不告诉它的情况下将它们组合成一个字符串?有很多方法可以将字符串粘合在一起,这甚至不是一种很可能解释多次返回的函数的方法(如果它返回数字怎么办?)。

但事实上,函数只能返回一次,这是我能想到的几乎所有语言的基本属性(逻辑编程语言除外)。因此,如果您放入return一个循环,所发生的一切就是该函数在循环的第一次迭代时返回并完成。这就是为什么你的函数只显示第一个键的原因!

有点类似的东西return可以多次使用:yield. 实际上,这使您可以将多个值作为迭代器返回(您只能通过循环循环一次for再次将它们取回)。但这在这里对您没有帮助,因为__str__应该返回一个字符串,而包含多个字符串的迭代器不是字符串!

于 2012-06-14T22:29:25.267 回答
0
def __str__(self):
    return '\n'.join(str(v) for v in self.pdb_atoms().itervalues())
于 2012-06-15T03:11:16.360 回答
0

如果您想要一个所有值由换行符分隔的字符串,请尝试以下操作:

def __str__(self):
    return '\n'.join(self.pdb_atoms())
于 2012-06-14T19:02:25.633 回答
0

您会看到问题,因为您是在构建整个列表之前从函数调用返回的。尝试以下操作以返回您的整个字典:

def __str__(self):
    return ''.join([self.pdb_atoms()[atom] for atom in self.pdb_atoms().keys()])

另外,请注意如何直接使用字符串对象而不必这样做'%s'%(string)

编辑:正如@Wooble 在评论中指出的那样,您不能调用字典对象。我假设您所说的 pdb_atoms 是一个返回字典的命令。如果没有,请删除().

于 2012-06-14T18:50:09.677 回答