Python格式化字串字面值 | 被官方文件稱之為『漂亮』的輸出格式
Python格式化字串字面值 | 被官方文件稱之為『漂亮』的輸出格式
本文參考輸入輸出 — Python 3.7.10 文件。首先宣告咱的實驗環境。
❯ python --version
Python 3.7.0
引例:場景帶來的需求
我們要在控制檯上給使用者反饋計算結果(比如AOE值為 0.82
),於是就要寫 print
邏輯。描述計算結果的語句是死的(AOE值為
),但數字是活的(0.82
)。我們希望把計算結果拼接到描述結構的語句上。新手可能會用字串的拼接(字串的「加法運算」+
)。
val_dict = {
'AOE': 0.8200001,
'wcb': 13423431,
'p': 0.0314
}
print("AOE值為 " + str(val_dict['AOE']) + " ,wcb值為 " + str(val_dict['wcb']))
if val_dict['p'] < 0.05: print('拒絕原假設')
else: print('接收原假設')
輸出:
AOE值為 0.8200001 ,wcb值為 13423431
拒絕原假設
我們將介紹一種格式化方法,無論是書寫還是易讀,都比上述方法要優雅。
並且,我們將解決字串拼接不能自動解決的小數位
、科學計數法
等問題。
格式化字串字面值
官方文件:要使用格式化字串字面值
,請在字串的開始引號或三引號之前加上一個 f
或 F
。在此字串中,你可以在 {
和 }
字元之間寫可以引用的變數或字面值的 Python
表示式。
有點費解,還是看例項最清晰。
咱們把上面的程式碼改一下。
print(f"AOE值為 {val_dict['AOE']} ,wcb值為 {val_dict['wcb']}")
print(f"{'拒絕原假設' if val_dict['p'] < 0.05 else '接收原假設'}")
輸出:
AOE值為 0.8200001 ,wcb值為 13423431
拒絕原假設
沒毛病,和之前的寫法效果一模一樣。但是咱們這回直接把「活的」變數『嵌入』到「死的」句子裡面去了。
而且咱還把邏輯寫進了字串,說明在 f"{}"
的 {}
大括號裡面,放變數和表示式都行。
再把上面的例子變個形,來看看更多用法:比如在 {}
大括號裡做簡單的運算,或者使用一些特殊格式化語法保留小數、轉化為科學計數法。
print(f"AOE值為 {val_dict['AOE'] * 100}% ,wcb值為 {val_dict['wcb'] :E}")
print(f"{'拒絕原假設' if val_dict['p'] < 0.05 else '接收原假設'}")
輸出:
AOE值為 82.00001% ,wcb值為 1.342343E+07
拒絕原假設
注意到上面我們用了 {val_dict['wcb'] :E}
這樣的特殊語法,:E
表示把數字 val_dict['wcb']
轉換為科學計數法。
類似:E
,我們還有更多用法。在 Python 中,其名稱為格式規格迷你語言(format specification mini language)。
我們可以直接應用 :.2%
來表示「讓數字變成百分數%
,並且保留兩位小數(.2
)」。
print(f"AOE值為 {val_dict['AOE'] :.2%}% ,wcb值為 {val_dict['wcb'] :E}")
print(f"{'拒絕原假設' if val_dict['p'] < 0.05 else '接收原假設'}")
輸出:
AOE值為 82.00%% ,wcb值為 1.342343E+07
拒絕原假設
豈不是要比 {val_dict['AOE'] * 100}%
的寫法優雅很多。
更多示例
其他用法可以參考Python的字串格式示例(format examples)。咱們這裡自己造個場景:打印表格。
table = {
'Tom': [31, 32.314, 31, .423],
'Jerry': [1, .41, 313, 123],
'Paul': [7, .4, 53, .45754]
}
def print_table(t):
print('| name | attr | feat | gest | dest |')
print('|--------|--------|--------|--------|--------|')
for name, vals in table.items():
print(f'|{name :_^8}|{vals[0] :^8}|{vals[1] :>6.2f} |{vals[2] :^8}|{vals[3] :>8.3f}|')
print_table(table)
輸出:
| name | attr | feat | gest | dest |
|--------|--------|--------|--------|--------|
|__Tom___| 31 | 32.31 | 31 | 0.423|
|_Jerry__| 1 | 0.41 | 313 | 123.000|
|__Paul__| 7 | 0.40 | 53 | 0.458|
如上:
- 我們的資料在
table
裡儲存了資料 - 在
print_table
儲存了列印資料的邏輯- f
{name :_^8}
中,^
表示居中,8
表示長度為8
,_
表示填充_
(預設填充空格) - f
{vals[1] :>6.2f}
中,>6
表示長度為6
且靠右,.2f
表示作為小數,且保留2
位
- f
更多的內容除了參考官方文件,菜鳥教程的Python格式化函式也是不錯的中文資料。
以後隨用隨查,在搜尋引擎中輸入關鍵字python + 格式化輸出
即可。
我是小拍,歡迎加我微信 PiperLHJ 轉載交流。
- 為什麼在 Windows 下用 Ctrl Z 退出 Python 而 Linux 下用 Ctrl D 呢?
- 為什麼在 Windows 下用 Ctrl Z 退出 Python 而 Linux 下用 Ctrl D 呢?
- 資源彙總 | 雲”技術科 & 你也可以動手在 Azure 訓練自己的人工智慧
- 講座預告 | 人人都可以在微軟Azure上訓練屬於自己的人工智障
- C || 一個簡單的 ::std::sort 怎麼就能造成堆溢位呢?
- 為什麼是 0x3f ?
- 數字、字元、字串? | C 與 python 中的常用轉換函式
- 如果我去參加前端面試,我應該能做出大聖老師的這道題...
- 痛苦調優10小時,我把 Spark 指令碼執行時間從15小時縮短到12分鐘!
- 分形之城:遞迴超典型例題,還沒明白?手把手畫給你看!
- 如何優雅地實現瀏覽器相容與CSS規則回退
- 巧技拾遺 | JavaScript 中 Array.every 和 Array.map 的巧妙結合
- 【吐血經驗】在 windows 上安裝 spark 遇到的一些坑 | 避坑指南
- 給 Python 新增進度條 | 給小白的 tqdm 精煉例項!
- @wraps 修飾器:讓你的 Python 程式碼更加簡短可愛 | 從簡單例項來認識它
- 併發和並行 | Python中實現多執行緒 threading 和多程序 multiprocessing
- Python格式化字串字面值 | 被官方文件稱之為『漂亮』的輸出格式
- Python 新增型別標註 | 散發著自由鬆散氣息的程式碼
- 我是如何高效錄製出那麼多高質量 gif 動圖的呢?
- 『力薦彙總』這些 VS Code 快捷鍵太好用,忍不住錄了這34張gif動圖