python--字符串格式化f-string

f-string是python3.6引入的新語法,用來替換傳統(tǒng)的字符串格式化方法%formatf-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í)間格式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容