20

以交互方式使用 python,有时需要显示一个任意复杂的数据结构的结果(例如带有嵌入列表的列表等)。显示它们的默认方式只是一个巨大的线性转储,它只是一遍又一遍地包裹,你有仔细解析阅读它。

有没有什么东西可以接受任何 python 对象并以更合理的方式显示它。例如

[0, 1,
    [a, b, c],
    2, 3, 4]

代替:

[0, 1, [a, b, c], 2, 3, 4]

我知道这不是一个很好的例子,但我想你明白了。

4

4 回答 4

29
from pprint import pprint
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
pprint(a)

请注意,对于像我的示例这样的简短列表, pprint 实际上会将其全部打印在一行上。但是,对于更复杂的结构,它可以很好地打印数据。

于 2008-09-18T11:44:54.990 回答
10

有时YAML可以很好地解决这个问题。

import yaml
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
print yaml.dump(a)

产生:

- 0
- 1
- [a, b, c]
- 2
- 3
- 4
于 2008-09-18T12:55:39.547 回答
8

除了pprint.pprint,pprint.pformat对于制作可读__repr__的 s 非常有用。我的 complex __repr__s 通常是这样的:

def __repr__(self):
    from pprint import pformat

    return "<ClassName %s>" % pformat({"attrs":self.attrs,
                                       "that_i":self.that_i,
                                       "care_about":self.care_about})
于 2008-09-18T14:56:26.557 回答
3

另一个不错的选择是使用IPython,它是一个具有许多额外功能的交互式环境,包括自动漂亮的打印、方法的制表符补全、简单的 shell 访问等等。它也很容易安装。

IPython 教程

于 2008-09-18T12:15:04.760 回答