在调试时,我经常放入打印语句以查看变量的值。我还喜欢打印出变量的名称,以免造成混淆。是否有比输入以下命令更短的命令来打印我想要的内容?
print("very_long_variable_name=", very_long_variable_name)
两次键入变量名称似乎是计算机应该能够自动化的额外工作。
我会编写一个函数,以简化输入:
printv(very_long_variable_name)
或printv('very_long_variable_name')
但是似乎编写这两个函数都不容易。是否有一些具有此功能的Python包?
答案 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))