f-string是python3.6引入的新語法,用來替換傳統(tǒng)的字符串格式化方法%和format。f-string
更方便快捷。
環(huán)境
- win10 64bit
- python 3.9
介紹
f-string是python3.6開始引入的新語法,相比于之前的%和format方法,f-string方法能更快速直觀的格式化字符串。
f-string形式為:f[F]"{content:format}",其中,
-
f或者F為標(biāo)識(shí)符,表示字符串為f-string; -
content是替換并填入字符串的內(nèi)容,可以是變量,表達(dá)式或者函數(shù); -
:format是格式描述符,默認(rèn)為空。
下面對(duì)比了三種格式化字符串的方法:
# 定義變量
var='good'
# %方法
'python is %s' % var
'python is good'
# format方法
'python is {}'.format(var)
'python is good'
# f-string方法
f'python is {var}'
'python is good'
引號(hào)嵌套
在f-string中,如果在大括號(hào)內(nèi)使用引號(hào),則大括號(hào)內(nèi)引號(hào)必須與字符串引號(hào)不同,否則會(huì)報(bào)錯(cuò)。
# 內(nèi)雙引號(hào),外單引號(hào)
f'python is {"good"}'
'python is good'
# 內(nèi)單引號(hào),外雙引號(hào)
f"python is {'good'}"
'python is good'
{}轉(zhuǎn)義
在f-string中,{}是作為占位符替換變量用的,具有特殊含義,如果要在f-string中顯示{}本身,則需要對(duì)應(yīng)使用{}進(jìn)行轉(zhuǎn)義。
# f-string顯示{
f'Left brace:{{'
'Left brace:{'
# f-string顯示}
f'Wright brace:}}'
'Wright brace:}'
# f-string顯示{}
f'Brace:{{}}'
'Brace:{}'
表達(dá)式與函數(shù)
f-string中的大括號(hào)不僅可以填入變量,也可以填入表達(dá)式或者調(diào)用函數(shù)。
表達(dá)式
可以在{}中定義表達(dá)式,python會(huì)自動(dòng)計(jì)算出結(jié)果。
# 定義變量
var=10
# f-string表達(dá)式
f'{var+1}'
'11'
函數(shù)
可以在{}中調(diào)用函數(shù)或方法。
# 定義變量
var='jack'
# f-string調(diào)用變量方法
f'{var.upper()}'
'JACK'
也可以自定義一個(gè)函數(shù),然后在{}中進(jìn)行調(diào)用。
# 定義函數(shù)
def plus(x):
return x+' python'
# 定義變量
var='hello'
# f-string調(diào)用自定義函數(shù)
f'{plus(var)}'
'hello python'
匿名函數(shù)
可以直接在{}中調(diào)用匿名函數(shù)。需要注意的是匿名函數(shù)調(diào)用需要用()包裹。
# 定義變量
var='hello'
# f-string調(diào)用匿名函數(shù)
f'{(lambda x:x+" python")(var)}'
'hello python'
字符串格式化
通過設(shè)置格式描述符,可以對(duì)傳入{}中的字符串進(jìn)行格式化。
寬度與精度
格式描述符形式為:width[.precision]。
-
width正整數(shù),設(shè)置字符串的寬度。 -
precision非負(fù)整數(shù),可選項(xiàng),設(shè)置字符串的精度,即顯示字符串前多少個(gè)字符。
# 設(shè)置字符串寬度
f'{"abcd":10}'
'abcd '
# 設(shè)置字符串寬度和精度
f'{"abcd":10.3}'
'abc '
填充與對(duì)齊
格式描述符形式為:[pad]alignWidth[.precision]。
-
pad填充字符,可選,默認(rèn)空格。 -
align對(duì)齊方式,可選<(左對(duì)齊),>(右對(duì)齊),^(居中對(duì)齊)。
字符串的填充與對(duì)齊需要與設(shè)置寬度和精度結(jié)合使用。
# 設(shè)置字符串寬度,用-填充,左對(duì)齊
f'{"abcd":-<10}'
'abcd------'
# 設(shè)置字符串寬度,用-填充,右對(duì)齊
f'{"abcd":->10}'
'------abcd'
# 設(shè)置字符串寬度,用-填充,居中對(duì)齊
f'{"abcd":-^10}'
'---abcd---'
# 設(shè)置字符串寬度和精度,用-填充,居中對(duì)齊
f'{"abcd":-^10.3}'
'---abc----'
數(shù)值格式化
通過設(shè)置格式描述符,可以對(duì)傳入{}中的數(shù)值進(jìn)行格式化。
寬度與精度
與字符串類似,也可以設(shè)置數(shù)值的寬度與精度。
格式描述符形式為:[[0]width][.precisionStyle]。
-
0可選,為0width時(shí),用0填充。默認(rèn)空格填充。 -
width整數(shù),設(shè)置數(shù)值的寬度。 -
precision非負(fù)整數(shù),設(shè)置數(shù)值的精度,保留的小數(shù)位數(shù)。 -
Style數(shù)值樣式,可選f(小數(shù)),e(科學(xué)計(jì)數(shù)),%(百分?jǐn)?shù))
# 設(shè)置數(shù)值寬度
f'{0.123:10}'
' 0.123'
# 設(shè)置數(shù)值寬度,0填充
f'{0.123:010}'
'000000.123'
# 設(shè)置數(shù)值精度和小數(shù)樣式
f'{0.123:.2f}'
'0.12'
# 設(shè)置數(shù)值精度和科學(xué)計(jì)數(shù)樣式
f'{0.123:.2e}'
'1.23e-01'
# 設(shè)置數(shù)值精度和百分比樣式
f'{0.123:.2%}'
'12.30%'
# 設(shè)置數(shù)值寬度,精度和小數(shù)樣式
f'{0.123:10.2f}'
' 0.12'
# 設(shè)置數(shù)值精度和小數(shù)樣式
f'{123:010}'
'0000000123'
千分位符
設(shè)置格式描述符為,或_,可以為數(shù)值添加千分位符號(hào)。
# 設(shè)置千分?jǐn)?shù)符為,
f'{1234567:,}'
'1,234,567'
# 設(shè)置千分?jǐn)?shù)符為_
f'{1234567:_}'
'1_234_567'
時(shí)間格式化
通過設(shè)置格式描述符,可以對(duì)傳入{}中的時(shí)間對(duì)象進(jìn)行格式化。時(shí)間對(duì)象可以是datetime或者pandas中的Timestamp等。
# 創(chuàng)建時(shí)間對(duì)象
import datetime as dt
import pandas as pd
dt_now=dt.datetime.now()
pd_now=pd.Timestamp.now()
# 時(shí)間格式化(提取年份)
print(f'{dt_now:%Y}')
print(f'{pd_now:%Y}')
2021
2021
# 提取日期
print(f'{dt_now:%D}')
print(f'{dt_now:%F}')
print(f'{dt_now:%x}')
02/24/21
2021-02-24
02/24/21
# 提取時(shí)間
print(f'{dt_now:%T}')
print(f'{dt_now:%X}')
20:24:39
20:24:39
其他日期設(shè)置格式,可以參考官網(wǎng):
時(shí)間格式