我经常在调试时发现自己正在做这样的事情:
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的内省功能,所以我不知道如何去做。
答案 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__