3

Python を始めたばかりですが、Perl の Data::Dumper モジュールを使用してデータ構造を適切に検査する明白な方法がないように思われることにショックを受けました。

たとえばpprint、値がオブジェクトであり、それがどのような種類のオブジェクトであるかを示すのではなく、オブジェクトの __repr__ 戻り値を表示します。

Data:: Dumper は、データ構造に何が含まれているかを正確に教えてくれますが、黙ってオブジェクトを文字列に変換することはありません。これは、データ検査の目的にはまったく役に立ちません。

Python でデータ構造の生のダンプを出力する方法はありますか? 私は自分で何かを作成できると思います.基本的に必要なのはデータ構造を歩くことprint(type(v), v)だけですが、これをうまく行うものがあるに違いありません.

編集:pprint解決するのは __repr__ であり、最初に言ったように __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 に答える