分享15個令人相見恨晚的Python字符串格式化技巧
今天,我將向大家分享15個令人相見恨晚的Python字符串格式化技巧,幫你寫出更高效、優(yōu)雅且Pythonic的代碼。
1. f'{variabe=}'
如果我們在f-字符串中的變量后添加 = 符號,它會同時打印變量名稱和值。
name: str = 'Jack' age: int = 21 city: str = 'New York' print(f'{name=} {age=} {city=}') # name='Jack' age=21 city='New York'
這個技巧對于代碼調(diào)試和日志記錄非常有用。
2. 四舍五入到小數(shù)點(diǎn)后N位
要將數(shù)值四舍五入到小數(shù)點(diǎn)后N位,可以簡單使用 {number:.Nf} 的形式(N為具體數(shù)字):
PI: float = 3.141592653589793 print(f'{PI:.2f}') print(f'{PI:.3f}') print(f'{PI:.4f}')
3. 四舍五入到 N 個有效數(shù)字
要將數(shù)值四舍五入到N位有效數(shù)字,可以簡單使用 {number:.Ng} 的形式(N為具體數(shù)字):
number: int = 131452 print(f'{number:.2g}') # 1.3e+05 print(f'{number:.3g}') # 1.31e+05 print(f'{number:.4g}') # 1.315e+05 x: float = 0.0131452 print(f'{x:.2g}') # 0.013 print(f'{x:.3g}') # 0.0131 print(f'{x:.4g}') # 0.01315
4. 格式化原始字符串
原始字符串就是轉(zhuǎn)義字符(\)不再轉(zhuǎn)義其他字符,而只是原本的反斜杠。在字符串前添加 f 就可格式化字符串,在字符串前添加 r 就可讓字符串僅表示原始含義。要使字符串既是格式化字符串又是原始字符串,只需在字符串前面添加 fr 或 rf,二者皆可。
name: str = 'Jack' age: int = 20 print(fr'{name=} \n {age=}') # name='Jack' \n age=20 print(rf'{name=} \n {age=}') # name='Jack' \n age=20
5. 使用空格對齊
可以通過 <N, >N 和 ^N 實(shí)現(xiàn)字符串的左、右和居中對齊,N 表示填充后的字符串寬度(默認(rèn)用空格填充):
fruit: str = 'banana' print(f'[{fruit:<20}]') # [banana ] print(f'[{fruit:>20}]') # [ banana] print(f'[{fruit:^20}]') # [ banana ]
注意,如果 fruit 的長度大于20,則會被截斷。
6. 使用其他字符對齊
在上面的對齊方式中,默認(rèn)使用空格填充。實(shí)際上,我們可以按自己的意愿指定其他填充字符,比如:
fruit: str = 'banana' print(f'[{fruit:#<20}]') # [banana##############] print(f'[{fruit:=>20}]') # [==============banana] print(f'[{fruit:*^20}]') # [*******banana*******]
7. f-字符串中單雙引號的使用
在舊版本的Python(<Python 3.12)中,f-字符串的內(nèi)外引號形式必須剛好相反,比如,外部為雙引號,則內(nèi)部須為單引號,反之亦然。如果內(nèi)外引號形式相同則會發(fā)生語法錯誤。
person_info: dict = {'name': 'Jack', 'age': 25} print(f'Name: {person_info["name"]}; Age: {person_info["age"]}') # Name: Jack; Age: 25 print(f"Name: {person_info['name']}; Age: {person_info['age']}") # Name: Jack; Age: 25 # print(f"Name: {person_info["name"]}; Age: {person_info["age"]}") # SyntaxError: f-string: unmatched '['
但是如果Python版本在3.12及以上,則f-字符串的內(nèi)外引號形式可以相同,比如:
print(f"Name: {person_info["name"]}; Age: {person_info["age"]}") # Name: Jack; Age: 25 print(f'Name: {person_info['name']}; Age: {person_info['age']}') # Name: Jack; Age: 25
8. 大數(shù)字格式化—插入千分位符
我們可以在f-字符串中插入千分位符(逗號),增加代碼的可讀性,語法形式為:{number:,}。
number: int = 10000000000 print(f'{number:,}') # 10,000,000,000
9. 展示原始輸出
在f-字符串中的變量后添加 !r 可以讓我們展示原始輸出,作用相當(dāng)于 repr(variable):
name: str = 'Jackzhang' print(f'raw output: {repr(name)}') # raw output: 'Jackzhang' print(f'raw output: {name!r}') # raw output: 'Jackzhang'
這個技巧在代碼調(diào)試和日志記錄的場景中會比較有用。
10. 日期時間格式化
在f-字符串中,我們還可以輕松實(shí)現(xiàn)日期時間的格式化,格式化代碼如下:
%Y:表示完整年份,如 2024
%y:表示截斷的年份,如 24
%m:將月份表示為數(shù)字
%d:將天表示為數(shù)字
%A:表示星期幾(全稱),如 Monday, Tuesday, …
%a:表示星期幾(簡稱),如 Mon, Tue, …
from datetime import datetime ddate: datetime = datetime.now() print(f'{ddate: %Y-%m-%d}') # 2024-09-05 print(f'{ddate: %y/%m/%d}') # 24/09/05 print(f'{ddate: %d/%m/%y %A}') # 05/09/24 Thursday print(f'{ddate: %Y-%m-%d %a}') # 05/09/24 Thu
其他更多格式化代碼可以參考:https://docs.python.org/3/library/datetime.html#format-codes
11. 浮點(diǎn)數(shù)轉(zhuǎn)化百分比
我們也可以通過f-字符串直接將數(shù)字轉(zhuǎn)換百分比,并且指定百分比中的小數(shù)位。
print(f'{0.25:.0%}') # 25% print(f'{0.5:.1%}') # 50.0% print(f'{0.75:.2%}') # 75.00% print(f'{1.25:.3%}') # 125.000%
12. 二、八及十六進(jìn)制數(shù)字展示
在f-字符串中,我們也可以將數(shù)字表示為二進(jìn)制、八進(jìn)制和十六進(jìn)制。
number:b:以二進(jìn)制表示數(shù)字number:o:以八進(jìn)制表示數(shù)字number:x:以十六進(jìn)制表示數(shù)字
a, b, c = 4, 16, 128 print(f'binary={a:b} octal={a:o} hexadecimal={a:x}') # binary=100 octal=4 hexadecimal=4 print(f'binary={b:b} octal={b:o} hexadecimal={b:x}') # binary=10000 octal=20 hexadecimal=10 print(f'binary={c:b} octal={c:o} hexadecimal={c:x}') # binary=10000000 octal=200 hexadecimal=80
13. 三引號f-字符串
三引號字符串可跨越多行,并且輸出與輸入完全一致(包括位置、縮進(jìn)等)。
person_info: dict = { 'name': 'Jackzhang', 'age': 25, 'gender': 'Male', 'city': 'San Francisco', } msg: str = f''' name: {person_info.get('name')} age: {person_info.get('age')} gender: {person_info.get('gender')} city: {person_info.get('city')} ''' print(msg)

14. 帶有位置參數(shù)的 format()
f-字符串的其中一個局限就是,我們無法將其用作模板字符串,將其存儲在數(shù)據(jù)庫中。
為了能夠在數(shù)據(jù)庫中存儲這樣的模板字符串供我們多次調(diào)用,可以這樣做:
person_info: dict = { 'name': 'Jackzhang', 'gender': 'Male', } temp_s: str = 'my name is {} and my gender is {}' print(temp_s.format(person_info['name'], person_info['gender'])) # my name is Jackzhang and my gender is Male
請注意,第一個參數(shù)名稱分配給第一個花括號,而第二個參數(shù)年齡分配給第二個花括號。如果有更多括號,以此類推。
15. 帶有關(guān)鍵字參數(shù)的 format()
將 .format() 與位置參數(shù)一起使用的限制之一是參數(shù)必須嚴(yán)格遵循特定的順序。為了克服這個限制,我們可以改用關(guān)鍵字參數(shù)。關(guān)鍵是我們現(xiàn)在需要將變量名稱添加到字符串中,如下所示:
person_info: dict = { 'name': 'Jackzhang', 'gender': 'Male', } temp_s: str = 'my name is {name} and my gender is {gender}' print(temp_s.format(name=person_info['name'], gender=person_info['gender'])) # my name is Jackzhang and my gender is Male print(temp_s.format(gender=person_info['gender'], name=person_info['name'])) # my name is Jackzhang and my gender is Male
從上面的代碼片段中我們可以看出,采用關(guān)鍵字參數(shù)引用后,即使改變參數(shù)順序,仍然可以獲得相同的結(jié)果。
總結(jié)
到此這篇關(guān)于15個Python字符串格式化技巧的文章就介紹到這了,更多相關(guān)Python字符串格式化技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從基礎(chǔ)到高級詳解Python與關(guān)系型數(shù)據(jù)庫交互的完全指南
在當(dāng)今數(shù)據(jù)驅(qū)動的開發(fā)環(huán)境中,與關(guān)系型數(shù)據(jù)庫進(jìn)行高效交互已成為Python開發(fā)者??必備的核心技能??,本文將全面探討Python與關(guān)系型數(shù)據(jù)庫交互的各種方法和技術(shù),有需要的小伙伴可以了解下2025-09-09
python系統(tǒng)指定文件的查找只輸出目錄下所有文件及文件夾
這篇文章主要介紹了python系統(tǒng)指定文件的查找只輸出目錄下所有文件及文件夾,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Python圖形用戶界面與游戲開發(fā)實(shí)例詳解
GUI是圖形用戶界面的縮寫,圖形化的用戶界面對使用過計算機(jī)的人來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Python圖形用戶界面與游戲開發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
Python使用__new__()方法為對象分配內(nèi)存及返回對象的引用示例
這篇文章主要介紹了Python使用__new__()方法為對象分配內(nèi)存及返回對象的引用,結(jié)合實(shí)例形式分析了Python對象初始化及內(nèi)存操作相關(guān)使用技巧,需要的朋友可以參考下2019-09-09
yolov5使用flask部署至前端實(shí)現(xiàn)照片\視頻識別功能
初學(xué)者在使用YOLO和Flask構(gòu)建應(yīng)用時,往往需要實(shí)現(xiàn)上傳圖片和視頻的識別功能,本文介紹了如何在Flask框架中實(shí)現(xiàn)這一功能,包括文件上傳、圖片放大查看、視頻識別以及識別后的文件下載,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09

