python中f-string的基本用法
Python 中的print 函數(shù)是很常用的一個(gè)函數(shù),可以用來(lái)輸出信息。而print(f)是Python 3.6版本以后新增的一種格式化輸出方式
,也被稱為f-string。
在Python中,print(f'') 是格式化字符串(f-string)的語(yǔ)法,它允許你在字符串中嵌入表達(dá)式,這些表達(dá)式在運(yùn)行時(shí)會(huì)被其值所替換。f 或 F 前綴表示這是一個(gè)格式化字符串字面量。
在 f’’ 或 F’’ 中的大括號(hào) {} 內(nèi),你可以放入任何有效的Python表達(dá)式。當(dāng) print 函數(shù)執(zhí)行時(shí),這些表達(dá)式會(huì)被求值,并且其結(jié)果會(huì)被插入到字符串的相應(yīng)位置。
想要了解更多則參考官方文檔
一、f-string 是什么?
在Python 3.6版本中,新增加一個(gè)格式化字符串輸出(f-string),即字符串前面加上字母f。使用f-string可以將變量值插入到字符串中,且表達(dá)式語(yǔ)法明顯、直觀。
二、f-string 的基本用法
f-string的基本格式是:
f'string {expression} string'
其中:花括號(hào)內(nèi)是表達(dá)式,表達(dá)式的值會(huì)被插入到字符串中。
下面是一個(gè)簡(jiǎn)單的例子:
name = "Alice" print(f"Hello, {name}!") # 輸出:Hello, Alice! x = 5 y = 10 print(f"The sum of {x} and {y} is {x + y}.") # 輸出:The sum of 5 and 10 is 15.
在上面的例子中,用花括號(hào)把變量括起來(lái),然后在花括號(hào)前面加上字母f。這樣,在字符串中用{}引用變量的時(shí)候,就會(huì)自動(dòng)將變量解析出來(lái)。
三種格式化字符串方式的比較
name = 'tom' age = '18' # 方法一: print(f'我是{name},今年{age}歲。') # 方法二: print('我是{},今年{}歲。'.format(name, age)) # 方法三: print('我是%s,今年%s歲' % (name, age))
三、基本使用示例
例子 1:基本用法
name = "Alice" print(f"Hello, {name}!") # 輸出:Hello, Alice!
例子 2:算術(shù)運(yùn)算
x = 5 y = 10 print(f"The sum of {x} and {y} is {x + y}.") # 輸出:The sum of 5 and 10 is 15.
例子 3:訪問字典元素
person = {"name": "Bob", "age": 30} print(f"{person['name']} is {person['age']} years old.") # 輸出:Bob is 30 years old.
例子 4:使用函數(shù)
def square(x): return x ** 2 number = 4 print(f"The square of {number} is {square(number)}.") # 輸出:The square of 4 is 16.
例子 5:格式化數(shù)字(一般可以用于保留浮點(diǎn)數(shù)的小數(shù)點(diǎn)后幾位。)
pi = 3.141592653589793 print(f"The value of pi is approximately {pi:.2f}.") # 輸出:The value of pi is approximately 3.14.
在上面的最后一個(gè)例子中,:.2f 是一個(gè)格式說(shuō)明符,它告訴Python將浮點(diǎn)數(shù) pi 格式化為帶有兩位小數(shù)的字符串。
四、f-string 的高級(jí)用法
4.1、對(duì)齊
f-string 的 {} 中采用 content:format 的方式來(lái)設(shè)置字符串格式,如要使用默認(rèn)格式,則可不必指定 :format。支持左對(duì)齊、右對(duì)齊、居中對(duì)齊。
如果你希望將變量打印在特定位置,可以使用對(duì)齊方式
4.1.1、默認(rèn)使用空格填充
name = 'ready' print(f'|{name:>20}|') # 右對(duì)齊,填充字符串長(zhǎng)度至20 # | ready| print(f'{name:<20}') # 左對(duì)齊,填充字符串長(zhǎng)度至20 # |ready | print(f'{name:^20}') # 居中對(duì)齊,填充字符串長(zhǎng)度至20 # | ready |
注意第一個(gè) print 中的number:n。這里的n表示從“|” 開始打印變量number的寬度(包括數(shù)字本身的寬度),還可以選擇進(jìn)行左對(duì)齊、居中對(duì)齊或右對(duì)齊。
在name:>20中,打印結(jié)果共占用 20 字符,字符串靠右打印,左側(cè)填充空格。
在name:^20中,打印結(jié)果共占用 20 字符,且字符串位于中間。
4.1.2、使用其他字符填充
name = 'ready' print(f'{name:a>20}') # aaaaaaaaaaaaaaaready print(f'{name:1<20}') # ready111111111111111 print(f'{name:-^20}') # --------ready-------
4.2、調(diào)試模式
f-string 的調(diào)試模式,即使用 {variable = }
代替 variable = {}
,如下面代碼所示。
在 f-string 的調(diào)試中,還可以執(zhí)行數(shù)學(xué)運(yùn)算,就像在下面示例中看到的那樣。
x = 10 y = 20 print(f"x = {x}, y = {y}") # 原方式 # x = 10, y = 20 print(f"{x = }, {y = }") # 調(diào)試模式 # x = 10, y = 20 # 運(yùn)算x*y的值 print(f"{x * y = }") # x * y = 200 print(f"{x = :.3f}") # x = 10.000
可以看到使用調(diào)試模式減少了代碼量,同時(shí)輸出的內(nèi)容是一致的。
此功能稱為“調(diào)試”,可以與其他修飾符結(jié)合使用。它還保留空格
,因此f"{x = }“和f”{x=}"將產(chǎn)生不同的字符串。
4.3、變量名格式化
有時(shí)候,我們需要在字符串中使用變量名,而不是變量的值,這時(shí)可以使用!r
或!s
。
比如下面這個(gè)例子:
name = "Tom" print(f"His name is {name!r}.") #輸出:His name is'Tom'
在上面的例子中,變量name的值是Tom,但是使用了!r后,輸出的是’Tom’,即字符串類型的值
4.4、表達(dá)式格式化
f-string 支持在花括號(hào)中使用表達(dá)式,從而處理一些復(fù)雜的邏輯。
比如下面這個(gè)例子:
name ="Tom" age=20 print(f"{'He' if age<18 else 'She'} is {name}.")#輸出:She is Tom.
在上面的例子中,使用if語(yǔ)句實(shí)現(xiàn)了根據(jù)年齡性別的判斷輸出。
4.5、格式化數(shù)字
可以用數(shù)字進(jìn)行各種格式化/轉(zhuǎn)換,下面是一些示例:
- 設(shè)置小數(shù)位數(shù)(精度):使用:.nf,其中n是小數(shù)位數(shù)
- 十六進(jìn)制轉(zhuǎn)換
- 二進(jìn)制轉(zhuǎn)換
- 八進(jìn)制轉(zhuǎn)換
- 科學(xué)計(jì)數(shù)法
- 使用前導(dǎo)零填充數(shù)字:使用:0n,其中n是總字符數(shù)
number = 420 # decimal places # 設(shè)置精度 print(f"number: {number:.2f}") # hex conversion # 十六進(jìn)制轉(zhuǎn)換 print(f"hex: {number:#0x}") # binary conversion # 二進(jìn)制轉(zhuǎn)換 print(f"binary: {number:b}") # octal conversion # 八進(jìn)制轉(zhuǎn)換 print(f"octal: {number:o}") # scientific notation # 科學(xué)計(jì)數(shù)法 print(f"scientific: {number:e}") # total number of characters # 填充前導(dǎo)0 print(f"Number: {number:09}")
輸出
number: 420.00
hex: 0x1a4
binary: 110100100
octal: 644
scientific: 4.200000e+02
Number: 000000420
類型轉(zhuǎn)換標(biāo)志符還有:d 整數(shù)、f 浮點(diǎn)數(shù)、g 根據(jù)值的大小選擇%f或%e、s 字符串
千位符分隔符、百分比
a = 1000000 print(f"{a= :,}") # a= 1,000,000 per = 0.59596 print(f"{per = :.2%}") # per = 59.60%
:.2%
告訴 Python 設(shè)置 2 位小數(shù)并在字符串末尾添加一個(gè)百分號(hào)。
4.6、日期格式化
如果想格式化日期,可以創(chuàng)建一個(gè)示例日期時(shí)間值。就像在應(yīng)用程序中格式化日期一樣,可以在 f-string 中定義你想要的格式,例如:<date_format>
下面將一個(gè) UTC 日期時(shí)間格式化為:
- 沒有微秒
- 僅日期
- 僅時(shí)間
- 帶上午/下午的時(shí)間
- 24 小時(shí)格式
import datetime today = datetime.datetime.utcnow() print(f"datetime : {today}") # datetime : 2024-02-28 06:11:04.848944 print(f"date time: {today:%m/%d/%Y %H:%M:%S}") # 沒有微秒 # date time: 02/28/2024 06:11:04 print(f"date: {today:%m/%d/%Y}") # 僅日期 # date: 02/28/2024 print(f"time: {today:%H:%M:%S.%f}") # 僅時(shí)間 # time: 06:11:04.848944 print(f"time: {today:%H:%M:%S %p}") # 時(shí)間帶上上午/下午 # time: 06:11:04 AM print(f"time: {today:%H:%M}") # 24小時(shí)制時(shí)間 # time: 06:11
還可以使用格式化選項(xiàng)做更多事情,下面是如何從日期中獲取星期幾和一年中的第幾天,還有計(jì)算已經(jīng)過了一年的多少天。
print(f"locale appropriate: {today:%c}") # 本地的適當(dāng)日期和時(shí)間表示法 # locale appropriate: Wed Feb 28 06:13:35 2024 print(f"weekday: {today:%A}") # 獲取當(dāng)前日期是星期幾 # weekday: Wednesday print(f"day of year: {today:%j}") # 獲取當(dāng)前日期是一年中的第幾天 # day of year: 059 day_of_year = f"{today:%j}" print(f"progress % year: {int(day_of_year)/365 * 100:.2f}%")# 獲取本年度已過去時(shí)間(百分比) # progress % year: 16.16%
4.7、引號(hào)規(guī)范、轉(zhuǎn)義問題
1、f-string 中 {} 內(nèi)使用的引號(hào)不能與 {} 外的引號(hào)定界符沖突,即如下這樣的操作是不可以的:
print(f'My name is {'Li Hua'}') # SyntaxError: f-string: expecting '}'
改為以下任何一種形式都能夠正常輸出(以下列舉了所有可能的情況):
""" 外部定界符是單引號(hào) """ print(f'My name is {"Li Hua"}') print(f'My name is {"""Li Hua"""}') """ 外部定界符是雙引號(hào) """ print(f"My name is {'Li Hua'}") print(f"My name is {'''Li Hua'''}") """ 外部定界符是雙三引號(hào) """ print(f"""My name is {'Li Hua'}""") print(f"""My name is {"Li Hua"}""") print(f"""My name is {'''Li Hua'''}""") """ 外部定界符是單三引號(hào) """ print(f'''My name is {'Li Hua'}''') print(f'''My name is {"Li Hua"}''') print(f'''My name is {"""Li Hua"""}''')
總結(jié):如果字符串內(nèi)部可能會(huì)出現(xiàn)多種引號(hào)但又不想操心引號(hào)問題,外部定界符直接使用 """
就行了。
2、大括號(hào)外的引號(hào)還可以使用\轉(zhuǎn)義,但大括號(hào)內(nèi)不能使用\轉(zhuǎn)義
print(f'I\'m{"小楊"}') # 輸出:I'm小楊 print(f'I\'m{"小楊"},{I\'m OK}') #輸出 ''' print(f'I\'m{"小楊"},{I\'m OK}') ^ SyntaxError: f-string expression part cannot include a backslash '''
如果確實(shí)需要在 {} 使用轉(zhuǎn)義,則應(yīng)當(dāng)將包含 \ 的內(nèi)容單獨(dú)聲明為一個(gè)變量
s = '\'' print(f"{s}") # '
4.8、f-string中大括號(hào)使用存在的問題
f-string大括號(hào)外如果需要顯示大括號(hào),兩個(gè)大括號(hào){{ }}就可以顯示了;大括號(hào)內(nèi)需要引號(hào),使用引號(hào)即可(規(guī)則如第7條所述)。
print(f"給大家推薦一本書{{物種起源}}") #輸出:給大家推薦一本書{物種起源}
到此這篇關(guān)于python中f-string的基本用法的文章就介紹到這了,更多相關(guān)python f-string內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 列表,數(shù)組和矩陣sum的用法及區(qū)別介紹
今天小編就為大家分享一篇python 列表,數(shù)組和矩陣sum的用法及區(qū)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-06-06python實(shí)現(xiàn)zip分卷壓縮的詳細(xì)方法
WinHex 開始16進(jìn)制一個(gè)一個(gè)文件對(duì)比 WinRar 創(chuàng)建的分卷壓縮和單個(gè) zip 文件的差異,這篇文章主要介紹了python實(shí)現(xiàn)zip分卷壓縮的詳細(xì)方法,需要的朋友可以參考下2024-02-02Pytorch加載數(shù)據(jù)集的方式總結(jié)及補(bǔ)充
Pytorch自定義數(shù)據(jù)集方法,應(yīng)該是用pytorch做算法的最基本的東西,下面這篇文章主要給大家介紹了關(guān)于Pytorch加載數(shù)據(jù)集的方式總結(jié)及補(bǔ)充,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Pycharm創(chuàng)建Django項(xiàng)目示例實(shí)踐
本文主要介紹了Pycharm創(chuàng)建Django項(xiàng)目示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03基于Django集成CAS實(shí)現(xiàn)流程詳解
這篇文章主要介紹了基于Django集成CAS實(shí)現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python基于域相關(guān)實(shí)現(xiàn)圖像增強(qiáng)的方法教程
當(dāng)在圖像上訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型時(shí),通過對(duì)由數(shù)據(jù)增強(qiáng)生成的更多圖像進(jìn)行訓(xùn)練,可以使模型更好地泛化。本文將為大家介紹Python基于域相關(guān)的圖像增強(qiáng)實(shí)現(xiàn)方法,需要的可以了解一下2022-01-01Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解
這篇文章主要介紹了Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解,需要的朋友可以參考下2020-02-02python繪制子圖技巧之plt.subplot、plt.subplots及坐標(biāo)軸修改
一個(gè)圖片里邊繪制多個(gè)圖像是繪圖中的常見需求,下面這篇文章主要給大家介紹了關(guān)于python繪制子圖技巧之plt.subplot、plt.subplots及坐標(biāo)軸修改的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Python利用for循環(huán)打印星號(hào)三角形的案例
這篇文章主要介紹了Python利用for循環(huán)打印星號(hào)三角形的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-04-04