指示性的Python打印

时间:2011-06-11 13:16:44

标签: python

如果有某种方法可以生成更具指示性的python打印,我希望如此:打印一些值时,不仅会打印出结果, 还有那个让我得到结果的表达。

例如,假设我有:

>>> x = 1

然后,为了打印x及其类型,我们得到:

>>> print x ; print type(x)
1
<type 'int'>

我想得到类似的东西:

>>> print x ; print type(x)
x: 1
type(x): <type 'int'>

我尝试过使用locals(),检查模块,但是我无法得到这个结果。 任何身份证 感谢。

3 个答案:

答案 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语法