簡體   English   中英

如何打印變量的名稱和值?

[英]How to print the name and value of a variable?

這就是我要記住的,因為每當我要檢查變量的值時,我都會兩次鍵入名稱:

a = 1
my_print(a)  # "a: 1"

這在Python中可行嗎?

如果您可以控制調用函數,則可以修改此函數使其正常運行,例如:

碼:

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

這是如何運作的?

檢查模塊可用於檢查調用方,並獲取調用方使用的代碼行。 只需用一點點字符串就可以從源代碼中收集變量名(假設它是一個簡單的變量,而不是一個更復雜的表達式)。

我會說“不”,其他任何可行的魔術就是……太多的魔術。

但是 ,您可以做一些事情,那就是使用inspect模塊查看堆棧跟蹤。

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

但這是不可靠的, 出於好奇我會更多地使用它 ,因為有很多“特殊情況”。 例如:Python中的前255個整數(我認為)占用一個特定的內存地址,因此,如果您有兩個等於=1變量,我認為您不會真正保證它是哪個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM