打印出变量名称和值的最短命令是什么?

时间:2018-10-27 19:12:22

标签: python

在调试时,我经常放入打印语句以查看变量的值。我还喜欢打印出变量的名称,以免造成混淆。是否有比输入以下命令更短的命令来打印我想要的内容?

print("very_long_variable_name=", very_long_variable_name)

两次键入变量名称似乎是计算机应该能够自动化的额外工作。

我会编写一个函数,以简化输入:

printv(very_long_variable_name)printv('very_long_variable_name')

但是似乎编写这两个函数都不容易。是否有一些具有此功能的Python包?

2 个答案:

答案 0 :(得分:1)

定义一个打印变量名称和值的函数非常困难。您必须访问调用代码的堆栈框架,并在其中查找变量:

import inspect

def printv(varname):
    frame = inspect.currentframe().f_back

    value = sentinel = object()
    for scope in [frame.f_locals, frame.f_globals, frame.f_builtins]:
        if varname in scope:
            value = scope[varname]
            break

    if value is sentinel:
        value = '???'
    else:
        value = repr(value)

    del frame
    print('{} = {}'.format(varname, value))

但是,并非总是可以根据变量的名称查找变量的值。它适用于全局变量和局部变量:

x = 'global x'

def func():
    x = 'local x'
    printv('x')

printv('x')  # output: x = 'global x'
func()       # output: x = 'local x'

但是,如果您尝试打印从未在嵌套函数中使用的变量的值,则会发生令人惊讶的事情:

x = 'global x'

def func():
    x = 'local x'

    def nested():
        printv('x')

    nested()

func()  # output: x = 'global x'

答案 1 :(得分:-3)

您可以使用eval关键字来做到这一点。

def printv(variableName):
     print(variableName + ' : ' + eval(variableName))