從 3.6 開始,Python 新增了一個格式化字串的方法,稱之為 f-string。
其用法就是在python原始字串的基礎上增加 f/F
字首,以大括號 {} 標明被替換的欄位。
f-string在本質上並不是字串常量,而是一個在執行時運算求值的表示式。
變數嵌入 & 變數拼接
改變以往佔位符或加號拼接的方式,使得字串拼接更加簡單直觀,可讀性也更好。
name = "Tom"
print(f"I'm {name}")
# I'm Tom
表示式求值
print(f"3 x 2 = {3*2}")
# 3 x 2 = 6
print(f"{3 * 2 = }")
# 3 * 2 = 6
呼叫函式
name = "Tom"
print(f"I'm {name.lower()}")
# I'm tom
多行string
name, job = "tom", "student"
s = f"""I'm {name.capitalize()},
and I'm a {job.capitalize()}"""
print(s)
"""
I'm Tom,
and I'm a Student
"""
對齊
先看下語法規則:
Syntax: {:[width][.precision][type]}
對齊效果由width控制:
<
:左對齊>
:右對齊(預設)^
:居中對齊
word = "python"
>>> f"|{word:<10}|"
'|python |'
>>> f"|{word:>10}|"
'| python|'
>>> f"|{word:^10}|"
'| python |'
帶有補全的對齊效果:
# 本例用小數點來補全空餘內容
>>> f"|{word:.<10}|"
'|python....|'
>>> f"|{word:.>10}|"
'|....python|'
>>> f"|{word:.^10}|"
'|..python..|'
例子:
格式化一個日期,要求月份、天數用兩位表示,不足兩位補0
year, month, day = 2022, 1, 1
>>> f"{year}-{month:0>2}-{day:0>2}"
'2022-01-01'
數字格式化
Syntax: {:[width][.precision][type]}
由precision指定精度,type對應資料型別。
type:
- s:字串格式(預設)
- d:整型
- e:科學計數,預設precision為6
- f:浮點數,預設precision為6
- %:百分比格式,預設浮點數格式,外加百分比格式化
浮點數精度格式化
同時會自動四捨五入。
pi = 3.141592654
print(f"PI = {pi:.2f}")
# PI = 3.14
print(f"PI = {pi:.3f}")
# PI = 3.142
科學計數
print(f"{pi:e}")
# 3.141593e+00
print(f"{pi:.2e}")
# 3.14e+00
百分比格式化
兼顧小數位保留和百分號格式化功能。
print(f"PI = {pi:.3%}")
# PI = 314.159%
print(f"PI = {pi:.2%}")
# PI = 314.16%
千位分隔符
使用 ,
格式化數字展示(常用於金額),易於閱讀
>>> f"{234234234:,}"
'234,234,234'
>>> f"{234234234.1314:,.2f}"
'234,234,234.13'
進位制轉換
先看看python中常用的用法及其效果:
num = 23
bin(num) # '0b10111'
oct(num) # '0o27'
hex(num) # '0x17'
在f-string中,b、o、d、x分別代表二進位制、八進位制、十進位制、十六進位制
f"{num:b}" # '10111'
f"{num:o}" # '27'
f"{num:d}" # '23'
f"{num:x}" # '17'
要想實現常用用法的效果,進位制規則程式碼前需要加#
號:
f"{num:#b}" # '0b10111'
f"{num:#o}" # '0o27'
f"{num:#d}" # '23'
f"{num:#x}" # '0x17'
lambda表示式
>>> f"result is {(lambda x: x**2+1)(5)}"
'result is 26'
日期格式化
日期格式資訊,適用於 date
、datetime
和 time
物件
today = datetime.datetime.today()
f"{today:%Y}" # '2022'
f"{today:%Y-%m}" # '2022-12'
f"{today:%Y-%m-%d}" # '2022-12-16'
f"{today:%F}" # '2022-12-16'
f"{today:%D}" # '12/16/22'
f"{today:%X}" # '21:01:27'
f"{today:%F %X}" # '2022-12-16 21:01:27'