【Python 基礎語法 #3】python print 變數的值 & 變數名稱 方法總整理

前言

python 更新至 3.8 後,f-string 新增了一個極好用的 debug 功能,
可以同時輸出「變數的值 (variable value)」與「變數的名稱 (variable name)」,
前者輸出「變數的值」完全不重要XD,重點是後者輸出「變數的名稱」,
平常我們要輸出「變數的名稱」,我們都只能自己打,
現在 f-string 提供了一個超方便的方式,將在此篇文章中介紹。

以往我們可能會這樣寫來 debug

通常我們只能印出「變數的值」,而不能印出「變數的名稱」
所以我們必須要這樣自己寫出「變數的名稱」。

當 debug 的訊息量變多,做這樣的事情才能讓我們搞清楚要印出來的是什麼東西。

word = "Hello"
print('word =', word)
print(f'word = {word}')
  • 輸出
word = Hello
word = Hello

python 3.8 後, f-string 增加新功能我們就可以這樣寫

word = "Hello"
print(f'{word = }')
  • 輸出
word = 'Hello' # 題外話:這個還特別顯示是 string

這功能真的超級方便的! 而且格式支援非常豐富 (至少我目前還沒碰到不能印的格式)!
推薦給大家!

python 3.8 以前也不要擔心,還是有方法

只是比較麻煩一點,要多寫很多東西XDDD

方法一

def show(variable):
    print(variable, '=', repr(eval(variable)))

方法二

此方法其實就是將「方法一」寫得更簡短一些~

show2 = lambda *w: [print(x,'=',repr(eval(x))) for x in w]

方法三

使用此方法,需要 「import sys」!!

import sys

def show3(expression):
    frame = sys._getframe(1)

    print(expression, '=', repr(eval(expression, frame.f_globals, frame.f_locals)))

範例

import sys

def show(variable):
    print(variable, '=', repr(eval(variable)))

show2 = lambda *w: [print(x,'=',repr(eval(x))) for x in w]

def show3(expression):
    frame = sys._getframe(1)

    print(expression, '=', repr(eval(expression, frame.f_globals, frame.f_locals)))

test_str = 'Hello world'
show('test_str')
show2('test_str')
show3('test_str')

結果

test_str = 'Hello world'
test_str = 'Hello world'
test_str = 'Hello world'

註: eval 表示「取值」,repr 表示顯示「變數型態」

例如說,eval 得到了 string 的內容,
而 repr 取得了 string 的型態 ,「‘Hello world’」
如果沒有 repr 則會印出 「Hello world」,讀者可以細心品味一下差別~

Reference

https://stackoverflow.com/questions/18425225/getting-the-name-of-a-variable-as-a-string
https://stackoverflow.com/questions/32000934/python-print-a-variables-name-and-value
https://stackoverflow.com/questions/592746/how-can-you-print-a-variable-name-in-python
https://stackoverflow.com/questions/46081715/python-print-variable-name-and-value-easily