3

刚接触 Python,我很震惊地发现似乎没有一种明显的方法可以正确检查数据结构,就像使用 Perl 的 Data::Dumper 模块一样。

例如,pprint将显示一个对象的 __repr__ 返回值,而不是告诉我该值是一个对象以及它是什么类型的对象。

Data::Dumper 会准确地告诉你数据结构包含什么,而不是默默地将对象转换为字符串,这对于数据检查目的绝对没有用处。

有没有办法在 Python 中打印数据结构的原始转储?我想我可以自己创建一些东西,基本上它需要做的就是遍历一个数据结构,print(type(v), v)但是必须有一些东西可以很好地做到这一点?

编辑:解决的是 __repr__ pprint,而不是我最初所说的 __str__ ,至少..通常?

所以,我认为我真正需要的是忽略 __repr__ 定义的 pprint 。那存在吗?

4

1 回答 1

2

打印

from pprint import pprint
pprint(someVar)

好的。我没有更好的答案。我总是使用“pprint”或“pformat”。您可以从字符串输出中推断出类型。我认为磨练从输出中知道类型的技能是要走的路。

或者如你所说,你自己的print(type(v), v).

使用 python,哲学似乎是这样的:“不要过多地依赖类型。只需获取一个对象并使用它,让运行时(测试)告诉用户他们是否搞砸了”:http://en。 wikipedia.org/wiki/Duck_typing#In_Python


看完评论。

为什么不给你想看到的类打补丁来打印一些有用的东西:

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return "Muahaha"

def main():
    s = Person("Santa", 1500)
    from pprint import pprint
    pprint(s)

    print
    print ".. Go MONKEYS ..."
    print

    # Monkey patch the Person class so it prints nice info from now on
    Person.__repr__ = lambda p: "<%s name='%s' age=%s>" % (p.__class__.__name__, p.name, p.age)
    pprint(s)

if __name__ == '__main__':
    main()

- 输出 -

matthew@speedy:~/tmp$ python monkey.py
Muahaha

.. Go MONKEYS ...

<Person name='Santa' age=1500>
于 2013-01-09T20:53:41.280 回答