前言
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