Python 如何打印变量的名称和值?
这就是我的想法,因为每当我想检查变量的值时,我会键入两次名称:Python 如何打印变量的名称和值?,python,Python,这就是我的想法,因为每当我想检查变量的值时,我会键入两次名称: a = 1 my_print(a) # "a: 1" 这在Python中是可能的吗?如果您控制调用函数,您可以对其进行破解,使其正常工作,如: 代码: 结果: 这是怎么回事? 该模块可用于检查调用者,并获取调用者使用的代码行。只要稍微修改一下字符串,就可以从源代码中收集变量名(假设它是一个简单的变量,而不是一个更复杂的表达式)。我会说“不”,任何其他可行的魔法就是。。。太神奇了 但是您可以做一些事情,那就是使用 但这并不可靠,我
a = 1
my_print(a) # "a: 1"
这在Python中是可能的吗?如果您控制调用函数,您可以对其进行破解,使其正常工作,如: 代码: 结果: 这是怎么回事? 该模块可用于检查调用者,并获取调用者使用的代码行。只要稍微修改一下字符串,就可以从源代码中收集变量名(假设它是一个简单的变量,而不是一个更复杂的表达式)。我会说“不”,任何其他可行的魔法就是。。。太神奇了 但是您可以做一些事情,那就是使用
但这并不可靠,我更愿意把它当作一种好奇心,因为有很多“特殊情况”。例如:Python中的前255个整数(我认为)占用一个特定的内存地址,因此,如果您有两个
=1
的变量,我不认为您真的能保证它是哪一个。不,这是不可能的,如果您需要此功能,请使用dict
。只需考虑<代码> MyApPrimor()/Cux>是如何定义的,例如“代码> DEF MyPrPosits(ARG1):…<代码> >它怎么可能知道它在调用上下文中被称为“代码> A<代码”。对于任何感兴趣的人,<代码>检查。STACK()(1)< /代码>是一个框架对象,它有一个<代码>它的前5项是“框架”、“文件名”、“行号”、“函数”和“代码上下文”。
import inspect
def print_name_and_value(var):
lines = inspect.stack()[1][4]
var_name = ''.join(lines).strip().split('(')[-1].split(')')[0]
print("%s: %d" % (var_name, var))
a = 5
print_name_and_value(a)
a: 5
import inspect
def my_print(thingy):
# print("id(thingy)=%s" % id(thingy))
previous_frame = inspect.currentframe().f_back
# print("locals: %s" % previous_frame.f_locals)
for variable_name, variable_value in previous_frame.f_locals.items():
if id(variable_value) == id(thingy):
return("%s: %s" % (variable_name, variable_value))
# print("globals: %s" % previous_frame.f_globals)
for variable_name, variable_value in previous_frame.f_globals.items():
if id(variable_value) == id(thingy):
return("%s: %s" % (variable_name, variable_value))
if __name__ == '__main__':
a = 1
print("Test %s" % my_print(a)) # "a: 1"
list_thingy = [1, 2, 3]
print("Test %s" % my_print(list_thingy))
def and_within_function():
d = {1: "a"}
print("Test %s" % my_print(d))
and_within_function()