Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印变量的名称和值?_Python - Fatal编程技术网

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()