➣ Reading Time: 6 minutes

前言

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

⭐Python 基礎用法 相關文章整理⭐:
1.【Python】python list 清除, 移除內容元素 remove, pop, del, clear相關用法整理 sample code (內含範例程式碼)
2.【Python】寫模組 module、package 總整理 Importing files from different folder
3.【Python】python assert (斷言) 用法 sample code (內含範例程式碼)
4.【Python】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)
5.【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼)
6.【Python】python map 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
7.【Python】python zip 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
⭐Python 字串處理 相關文章整理⭐:
1.【Python】python print 變數的值 & 變數名稱 方法總整理
2.【Python】python string format str.format 總整理
⭐Python 檔案處理 相關文章整理⭐:
1.【Python】python 開關檔範例 與 程式模板 with open / file open sample code
2.【Python】取出檔案名稱 (含副檔名、不含副檔名) os path basename split 取出 檔名 路徑 不要副檔名 sample code
3.【Python】在 python 中利用 os.chmod 更改檔案的權限 chmod 777
4.【Python】利用 shutil 來複製檔案 shutil copy file
5.【Python】python 建立資料夾範例 mkdir os.makedirs() sample code
6.【Python】python 移除資料夾範例 rmdir shutil.rmtree() sample code
7.【Python】確認檔案是否存在 os.path.isfile / 確認資料夾是否存在 os.path.isdir sample code is folder / file exist
⭐Python 系統偵測 相關文章整理⭐:
1.【Python】python pyinotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
2.【Python】python 利用 argparse 使程式執行時可帶參數 (內附範例程式碼) sample code
⭐Python 平行運算 相關文章整理⭐:
1.【Python】threading – 建立多執行緒來執行程式 (內含範例程式碼) sample code
2.【Python】multiprocessing – 用多核心來執行程式 (內含範例程式碼) sample code
3.【Python】multiprocessing pool, map, apply_async – 用多核心來執行程式並取得結果 (內含範例程式碼) sample code
4.【Python】python thread multiprocess 比較總整理
5.【Python】python pooling multiprocess – 用多核心來執行程式 sample code (內含範例程式碼)
⭐Python 測試程式 相關文章整理⭐:
1.【Python】python 測試程式 – 利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)
2.【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)
⭐Python Chatbot 相關文章整理⭐:
1.【Chatbot】(全圖文說明) LINE Developers bot 機器人註冊與設定
2.【Chatbot】(全圖文說明) ngrok 本地伺服器設定方法 – LINE bot local server
3.【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)
4.【Chatbot】[講義分享] 手把手實作line機器人 (linebot API 運用)
⭐Python Google Colab (Colaboratory) 相關文章整理⭐:
1.【Colab】Python colab 上傳檔案的方法 (內含範例程式碼) upload files
2.【Colab】Python colab 連接 google 雲端硬碟取用資料 (內含範例程式碼) mount google drive
⭐Python 其他筆記 相關文章整理⭐:
1.【Python】anaconda 更新 (upgrade) python 3.8 版本筆記
2.【Sublime】Sublime 將縮排 “tab” 改成 4格空白 的方法 (圖文說明) sublime indent 4 spaces
3.【Sublime】Python 縮排小技巧 (很爛但實用) 快速將 tab 改成「4格空白」的方法
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps