使用内省删除Python的'print'中的冗余

时间:2014-10-27 00:03:20

标签: python introspection

我经常在调试时发现自己正在做这样的事情:

print a.foo, b.bar, c.baz

打印类似

的内容
1 3 4

这是正确的,但没有尽可能有用。
理想情况下想要打印的内容类似于:

a.foo: 1, b.bar: 3, c.baz: 4

可以通过

轻松完成
print 'a.foo:', a.foo, 'b.bar:', b.bar, 'c.baz:', c.baz

但现在我两次写同样的东西了!

我可以使用像内省这样的Python技巧来避免重复自己吗? 我想象一个像这样的神奇printexp

printexp('a.foo', 'b.bar', 'c.baz')

但我不熟悉Python的内省功能,所以我不知道如何去做。

2 个答案:

答案 0 :(得分:1)

我自己想通了:

>>> def printexp(*exps, **kwargs):
    import sys
    import inspect
    import itertools
    locs = dict(inspect.currentframe().f_back.f_locals)
    locs.setdefault('_file', kwargs['file'] if 'file' in kwargs else sys.stdout)
    exec('print' + ' ' + '>>' + '_file' + ', ' + (', ' + '_file' + '.write(",")' + ' or ').join(map(lambda exp: '"' + exp.replace('"', '\\"') + ':' + '"' + ', ' + exp, exps)) + '', None, locs)

>>> x = 5
>>> printexp('x', 'x')
x: 5, x: 5

答案 1 :(得分:0)

这并不是你要求的,但如果你想用"普通"对象(我指的是用户定义的类的对象),您可能只想这样做:

print a.__dict__