如果有某种方法可以生成更具指示性的python打印,我希望如此:打印一些值时,不仅会打印出结果, 还有那个让我得到结果的表达。
例如,假设我有:
>>> x = 1
然后,为了打印x及其类型,我们得到:
>>> print x ; print type(x)
1
<type 'int'>
我想得到类似的东西:
>>> print x ; print type(x)
x: 1
type(x): <type 'int'>
我尝试过使用locals(),检查模块,但是我无法得到这个结果。 任何身份证 感谢。
答案 0 :(得分:5)
你当然可以为此目的编写一个函数:
def print_ex(expr, globals=None, locals=None):
res = eval(expr, globals, locals)
print expr + ":", res
print "type(" + expr + "):", type(res)
示例:
>>> print_ex("2 + 3")
2 + 3: 5
type(2 + 3): <type 'int'>
请注意eval()
执行任意表达式,因此请确保永远不要将字符串从不受信任的来源传递给print_ex()
。
如果您不希望明确传递locals()
和globals()
,还可以使用
frame = inspect.currentframe().f_back
globals = frame.f_globals
locals = frame.f_locals
自动使用调用框架的globals()
和locals()
。
答案 1 :(得分:1)
这展示了我能够轻松展示您想要的信息的最合理方式:
def info(name, namespace):
thing = namespace[name]
print "%s: %s" % (name, thing)
print "type(%s): %s" % (name, type(thing))
要使用它,请提供您感兴趣的对象的名称以及命名空间:
$ python -i info.py
>>> a = 1
>>> info('a', locals())
a: 1
type(a): <type 'int'>
>>>
当然,您可以将其拆分为两个不同的函数,将您喜欢的日志记录模块子类化并将其添加为方法等。
答案 2 :(得分:1)
你可以自己动手:
def detailed_printer(expression):
result = eval(expression)
print(expression+": "+str(result))
return result
(这样你也可以从返回值中得到结果)
* python 3语法