這些 f-string 的用法,90% 的 Pythoner 不知道!
來源 | Python技術f-string 是 Python3.6 版本開始引入的特性,想必很多 Python 用戶都基礎性的使用過,通過它我們可以更加方便地向字符串中嵌入自定義內容,但 f-string 真正蘊含的功能遠比大多數用戶知道的要豐富,今天我們就來一起探索它們!
基礎用法f-string 最基礎的用法很簡單,如下例所示,在前綴f的字符串中向{}內直接填入要嵌入的值、變量或計算表達式:
print(f'1+1 = {2}')
# 輸出:1+1 = 2
a = 1 + 1
print(f'1+1 = {a}')
# 輸出:1+1 = 2
print(f'1+1 = {1+1}')
# 輸出:1+1 = 2
自記錄表達式從 Python3.8 版本開始,f-string 引入了自記錄表達式,使得我們可以按照下面的寫法快速輸出一些計算表達式:
import math
a = 8
print(f'{math.log(8) = }')
# 輸出:math.log(8) = 2.0794415416798357
多行 f-string通過最外層包裹小括號,我們可以像下面這樣非常靈活地撰寫多行 f-string:
a = 1
b = 2
c = 3
s = (
f'{a = }\n'
f'{b = }\n'
f'{c = }\n'
)
print(s)
# 輸出:
a = 1
b = 2
c = 3
控制浮點數精度在 f-string 中我們可以按照下列方式靈活地控制浮點數的小數位數:
import math
pi = math.pi
print(f'{pi:.3f}')
print(f'{pi:.8f}')
# 輸出
3.142
3.14159265
進制轉換輸出在 f-string 中,我們可以直接在輸出時將目標轉換成不同的進制進行輸出:
number_10 = 1024
print(f'{number_10:b}') # 2進制
print(f'{number_10:o}') # 8進制
print(f'{number_10:x}') # 16進制小寫
print(f'{number_10:X}') # 16進制大寫
print(f'{number_10:c}') # ASCII編碼
# 輸出:
10000000000
2000
400
400
?
字符串對齊f-string 默認為右對齊,我們可以修改對齊方式:
text = 'python'
print(f'{text:>10}') # 右對齊
print(f'{text:<10}') # 左對齊
print(f'{text:^10}') # 居中對齊
print(f'{text:*^10}') # 居中對齊,用*補齊空白
n = 10
print(f'{text:#^{n}}') # 參數嵌套,居中對齊,用~補齊空白
# 輸出:
python
python
python
**python**
##python##
標準化顯示寬度當我們需要對 f-string 打印內容的顯示最小寬度進行限制時,譬如打印出類似表格的結構,可以這樣寫:
for x in range(1,11):
print(f'{x:02}|{x**2:3}/{x**5:6}')
# 輸出:
01| 1| 1
02| 4| 32
03| 9| 243
04| 16| 1024
05| 25| 3125
06| 36| 7776
07| 49| 16807
08| 64| 32768
09| 81| 59049
10|100|100000
格式化日期針對日期類型的變量,我們可以參考下面的方式,直接在 f-string 中快速地進行格式化:
import datetime
now = datetime.datetime.now()
print(f'{now:%Y年%m月%d號%H點%M分%S秒}')
# 輸出:
2022年05月21號17點04分08秒
科學計數我們可以實現指定位數的科學計數法顯示方式:
import math
pi = math.pi
print(f'{pi*100:.10e}')
# 輸出
3.1415926536e+02
控制有效數字位數我們還可以控制所顯示數字的有效數字位數,即從左開始第一個不為0的數字往右一共顯示的個數,當位數低于整數部分時會自動變成科學計數法格式:
a = 1312.3123123123123
print(f'{a:.10g}')
#輸出:1312.312312
a = 1312.3123123123123
print(f'{a:.3g}')
#輸出:1.31e+03
總結關于在 Python 中 f-string 的幾個技巧的文章就介紹到這里,這些騷操作你學會了嗎?還有哪些狂拽炫酷吊炸天的代碼,歡迎留言區(qū)討論!
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。