LoginSignup
4
8

More than 5 years have passed since last update.

PythonでRubyのp、PHPのvar_dump、JSのconsole.log相当をする

Last updated at Posted at 2019-02-22

Python初心者なんですが、どうやるのが良いんですかね?
標準のprint pprintはインスタンス変数を表示してくれないのが残念。
サードパーティモジュールもいくつかあるけどGitHubのstar数は多くない。
もしかしてPythonistaはprintデバッグなんてしないんでしょうか?
ほんのちょっと試した中では無名のpprettyが一番良かったですが。

下記のコードを使って比較してみました。

import pprint
import pprintpp
import beeprint
import ppretty

class Sage:
    def __init__(self):
        self.x = 9

class Hoge:
    def __init__(self):
        self.a = 123
        self.b = 'moge'
        self.c = [1, 2, {'mm': 3}]
        self.d = Sage()

def pvars(obj):
    try:
        print(vars(obj))
    except:
        print(obj)

def ppvars(obj):
    try:
        pprint.pprint(vars(obj))
    except:
        pprint.pprint(obj)

if __name__ == '__main__':
    objs = [
        Hoge(),
        123,
        'asd',
        None,
    ]

    print('\n### print(標準)')
    for o in objs:
        print(o)

    print('\n### pprint(標準)')
    for o in objs:
        pprint.pprint(o)

    print('\n### pvars(print + vars)')
    for o in objs:
        pvars(o)

    print('\n### ppvars(pprint + vars)')
    for o in objs:
        ppvars(o)

    print('\n### pprintpp(サードパーティ)')
    for o in objs:
        pprintpp.pprint(o)

    print('\n### beeprint(サードパーティ)')
    for o in objs:
        beeprint.pp(o)

    print('\n### ppretty(サードパーティ)')
    for o in objs:
        print(ppretty.ppretty(o))

比較結果

print(標準)

<__main__.Hoge object at 0x7fd5d931bb38>
123
asd
None

pprint(標準)

<__main__.Hoge object at 0x7fd5d931bb38>
123
'asd'
None

pvars(print + vars)

{'a': 123, 'b': 'moge', 'c': [1, 2, {'mm': 3}], 'd': <__main__.Sage object at 0x7fd5d931bb70>}
123
asd
None

ppvars(pprint + vars)

{'a': 123,
 'b': 'moge',
 'c': [1, 2, {'mm': 3}],
 'd': <__main__.Sage object at 0x7fd5d931bb70>}
123
'asd'
None

pprintpp(サードパーティ)

<__main__.Hoge object at 0x7efc722d1b38>
123
'asd'
None

beeprint(サードパーティ)

instance(Hoge):
  a: 123,
  b: 'moge',
  c: [
    1,
    2,
    {
      'mm': 3,
    },
  ],
  d: instance(Sage):
    x: 9
123
'asd'
None

ppretty(サードパーティ)

__main__.Hoge(
    a = 123, 
    b = 'moge', 
    c = [1, 2, {'mm': 3}], 
    d = __main__.Sage(x = 9)
)
123
'asd'
None

参考

4
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8