Python 好用的 F 字串!

Python 好用的 F 字串!

Python 裡的 F 字串(F-String)不只是可以直接把變數塞到字串裡、看起來更好看、更好寫而已,它還有一些有趣的用法,像是我們常會遇到需要幫錢錢加上千位數字的逗點,在其它程式語言可能需要透過其它函數或是另外自己寫函數來處理,用 F 字串可以輕鬆做到這件事,例如:

my_money = 1000000

print(f"{my_money:,}")     # 印出 1,000,000
print(f"{my_money:.2f}")   # 印出 1000000.00
print(f"{my_money:,.2f}")  # 印出 1,000,000.00

在 F 字串裡的變數後面加上 : 可以幫我們做格式化,這裡的 , 就是在千位數字的地方加上逗點,.2f 是指可以讓原本的整數以小數點以下 2 位數的方式呈現,如果組合在一起 ,.2f 就會變成整數部份加上千位數逗號,小數部份則呈現到小數點以下 2 位數。

有時候我們在做一些數學計算之後得到的結果想要用百分比的形式,你可能得先把它乘以 100 再後面加個 % 符號,像這樣:

ratio = 0.315
print(f"{ratio * 100}%") # 印出 31.5%

這沒什麼問題,在別的程式語言也差不多是這麼做,但 Python 的 F 字串可以更簡單幫我們做到這件事:

ratio = 0.315
print(f"{ratio:.1%}") # 印出 31.5%

.1 表示顯示到小數點以下第 1 位,後面的 % 就是直接幫我們換成百分比的形式,至於這樣寫有沒有比較簡單或直觀可能因人而異了,因為有些人少了乘以 100 可能會覺得哪裡怪怪的。

如果有需要的話,我們同樣也可以透過 : 來設定字串的「寬度」,例如:

pi = 3.1415926

print(f"|{pi:5}|")   # 印出 |3.1415926|
print(f"|{pi:20}|")  # 印出 |            3.1415926|

我刻意在字串的兩邊加上 | 是為了讓大家看得更清楚一點,: 後面接的數字就是這個 {} 字串的寬度,如果字串本身的字數超過寬度(例如 5),字串還是會把設定的寬度給撐開,如果我設定寬度大一點,例如設定成 20,這樣會在字串的左邊補上空白,呈現出來的效果就會變成靠右對齊。

有靠右對齊,自然也有靠左對齊跟置中對齊,這時候可以在寬度的數字前面加上一個 - 符號,例如:

pi = 3.1415926

print(f"|{pi:<20}|")  # 靠左對齊
print(f"|{pi:>20}|")  # 靠右對齊
print(f"|{pi:^20}|")  # 置中對齊

印出來的結果會是:

|3.1415926           |
|           3.1415926|
|     3.1415926      |

以做網站來說,因為瀏覽器不太會理會 HTML 裡多餘的空白字元,所以這種格式化對齊大概沒什麼機會派上用場,但如果是用在做一些資料統計或分析的小程式,並打算在終端機畫面呈現或是列印報表的時候,這種對齊就挺方便的了,例如:

print(f"1. {'為你自己學 Python':<20} {'NTD 120'}")
print(f"2. {'為你自己學 Git':<20} {'NTD 200'}")
print(f"3. {'為你自己學 Ruby':<20} {'NTD 180'}")
print(f"4. {'為你自己學 Rust':<20} {'NTD 250'}")

印出來的結果會變這樣:

1. 為你自己學 Python         NTD 120
2. 為你自己學 Git            NTD 200
3. 為你自己學 Ruby           NTD 180
4. 為你自己學 Rust           NTD 250

填補的字串預設是使用空白字元,但如果你喜歡也可以換成別的字,例如:

pi = 3.1415926

print(f"|{pi:x<20}|")  # 靠左對齊
print(f"|{pi:x>20}|")  # 靠右對齊
print(f"|{pi:x^20}|")  # 置中對

我用了 x 字元來填補空白,印出來的結果會變成:

|3.1415926xxxxxxxxxxx|
|xxxxxxxxxxx3.1415926|
|xxxxx3.1415926xxxxxx|

F 字串也能幫我們把整數轉換成二進位、八進位或十六進位,例如:

# 格式化成二進位
print(f"{10:b}") # 印出 1010

 # 格式化成八進位
print(f"{10:o}") # 印出 12

# 格式化成十六進位
print(f"{255:x}") # 印出 ff

還記得以前學過的「科學記號表示」嗎?F 字串也能幫我們搞定,例如:

speed_of_light = 299792458      # 光速
print(f"{speed_of_light:.3e}")  # 印出 2.998e+08

.3 代表小數點後面要顯示幾位數,e 代表科學記號,這樣就能把數字格式化成科學記號表示法。最後,F 字串還能順便幫我們搞定日期格式:

from datetime import date

the_day = date(1947, 2, 28)   # 228

print(f"{the_day:%Y/%m/%d}")  # 印出 1947/02/28

其中 %Y%m%d 是分別代表代表年份、代表月份以及日期,這些格式化參數的用法跟其它程式語言的格式化差不多,應該不難查到分別代表哪些意思。雖然在其它程式語言也有類似這種把變數塞進字串裡的「字串安插(String Interpolation)」功能,但 Python 的 F 字串還能加上格式化工具,能玩的把戲就更多了

工商:想學 Python 嗎?我教你啊!

想要成為軟體工程師嗎?這不是條輕鬆的路,需要有足夠的決心、設定目標並持續學習,我們的 ASTROCamp 軟體工程師培訓營提供專業的前後端課程培訓,幫助你在最短時間內建立正確且扎實的軟體開發技能,有興趣而且不怕吃苦的話不妨來試試看吧 :)