我们如何在 python 中打印变量名称及其值,这在调试期间会有用?
How can we print the variable name along with its value in python, which will be useful during debugging?
我已经多次写过这样的东西:
print 'customer id: ', customerId
我想要一个打印变量名和值的函数
>>myprint(customerId)
>>customerId: 12345
完全按照您的要求执行涉及符号 table 的 O(n) 查找,恕我直言,这很糟糕。
如果可以传递变量名对应的字符串,可以这样做:
import sys
def myprint(name, mod=sys.modules[__name__]):
print('{}: {}'.format(name, getattr(mod, name)))
测试:
a=535
b='foo'
c=3.3
myprint('a')
myprint('b')
myprint('c')
将打印:
a: 535
b: foo
c: 3.3
您也可以通过传递第二个参数来使用它来打印来自另一个模块的变量,例如:
>>> import os
>>> myprint('pathsep', os)
pathsep: :
基本上,您每次调用辅助函数时都需要将变量名手动输入到辅助函数的参数中,这与直接将字符串格式化为打印消息一样。
另一个可能的(没用的?)可能是:
import re
regex = re.compile("__(.+)")
def check_value(checkpoint_name):
print "============"
print checkpoint_name
print "============"
for variable_name, variable_value in globals().items():
if regex.match(variable_name) is None:
print "%s\t:\t%s" % (variable_name, str(variable_value))
print "============"
,它在每次调用时在全局范围内打印所有非系统保护的声明变量。要调用该函数,请执行
a = 0
check_value("checkpoint after definition of a")
b = 1
check_value("checkpoint after definition of b")
您可以根据需要随意自定义功能。我刚想到这个,不确定这是否按您想要的方式工作...
我已经多次写过这样的东西:
print 'customer id: ', customerId
我想要一个打印变量名和值的函数
>>myprint(customerId)
>>customerId: 12345
完全按照您的要求执行涉及符号 table 的 O(n) 查找,恕我直言,这很糟糕。
如果可以传递变量名对应的字符串,可以这样做:
import sys
def myprint(name, mod=sys.modules[__name__]):
print('{}: {}'.format(name, getattr(mod, name)))
测试:
a=535
b='foo'
c=3.3
myprint('a')
myprint('b')
myprint('c')
将打印:
a: 535
b: foo
c: 3.3
您也可以通过传递第二个参数来使用它来打印来自另一个模块的变量,例如:
>>> import os
>>> myprint('pathsep', os)
pathsep: :
基本上,您每次调用辅助函数时都需要将变量名手动输入到辅助函数的参数中,这与直接将字符串格式化为打印消息一样。
另一个可能的(没用的?)可能是:
import re
regex = re.compile("__(.+)")
def check_value(checkpoint_name):
print "============"
print checkpoint_name
print "============"
for variable_name, variable_value in globals().items():
if regex.match(variable_name) is None:
print "%s\t:\t%s" % (variable_name, str(variable_value))
print "============"
,它在每次调用时在全局范围内打印所有非系统保护的声明变量。要调用该函数,请执行
a = 0
check_value("checkpoint after definition of a")
b = 1
check_value("checkpoint after definition of b")
您可以根据需要随意自定义功能。我刚想到这个,不确定这是否按您想要的方式工作...