f-strings: Python字元串處理的瑞士軍刀

来源:https://www.cnblogs.com/iorson/archive/2022/12/17/16989227.html
-Advertisement-
Play Games

f-string,亦稱為格式化字元串常量(formatted string literals),是Python3.6新引入的一種字元串格式化方法,該方法源於PEP 498 – Literal String Interpolation,主要目的是使格式化字元串的操作更加簡便。 ...


從 3.6 開始,Python 新增了一個格式化字元串的方法,稱之為 f-string。

其用法就是在python原始字元串的基礎上增加 f/F 首碼,以大括弧 {} 標明被替換的欄位。

f-string在本質上並不是字元串常量,而是一個在運行時運算求值的表達式。

變數嵌入 & 變數拼接

改變以往占位符或加號拼接的方式,使得字元串拼接更加簡單直觀,可讀性也更好。

name = "Tom"

print(f"I'm {name}")
# I'm Tom

表達式求值

print(f"3 x 2 = {3*2}")
# 3 x 2 = 6

print(f"{3 * 2 = }")
# 3 * 2 = 6

調用函數

name = "Tom"

print(f"I'm {name.lower()}")
# I'm tom

多行string

name, job = "tom", "student"

s = f"""I'm {name.capitalize()}, 
and I'm a {job.capitalize()}"""

print(s)
"""
I'm Tom, 
and I'm a Student
"""

對齊

先看下語法規則:

Syntax: {:[width][.precision][type]}

對齊效果由width控制:

  • <:左對齊
  • >:右對齊(預設)
  • ^:居中對齊
word = "python"

>>> f"|{word:<10}|"
'|python    |'

>>> f"|{word:>10}|"
'|    python|'

>>> f"|{word:^10}|"
'|  python  |'

帶有補全的對齊效果:

# 本例用小數點來補全空餘內容
>>> f"|{word:.<10}|"
'|python....|'

>>> f"|{word:.>10}|"
'|....python|'

>>> f"|{word:.^10}|"
'|..python..|'

例子:

格式化一個日期,要求月份、天數用兩位表示,不足兩位補0

year, month, day = 2022, 1, 1

>>> f"{year}-{month:0>2}-{day:0>2}"
'2022-01-01'

數字格式化

Syntax: {:[width][.precision][type]}

由precision指定精度,type對應數據類型。

type:

  • s:字元串格式(預設)
  • d:整型
  • e:科學計數,預設precision為6
  • f:浮點數,預設precision為6
  • %:百分比格式,預設浮點數格式,外加百分比格式化

浮點數精度格式化

同時會自動四捨五入。

pi = 3.141592654
print(f"PI = {pi:.2f}")
# PI = 3.14

print(f"PI = {pi:.3f}")
# PI = 3.142

科學計數

print(f"{pi:e}")
# 3.141593e+00

print(f"{pi:.2e}")
# 3.14e+00

百分比格式化

兼顧小數位保留和百分號格式化功能。

print(f"PI = {pi:.3%}")
# PI = 314.159%

print(f"PI = {pi:.2%}")
# PI = 314.16%

千位分隔符

使用 , 格式化數字展示(常用於金額),易於閱讀

>>> f"{234234234:,}"
'234,234,234'

>>> f"{234234234.1314:,.2f}"
'234,234,234.13'

進位轉換

先看看python中常用的用法及其效果:

num = 23
bin(num)	# '0b10111'
oct(num)	# '0o27'
hex(num)	# '0x17'

在f-string中,b、o、d、x分別代表二進位、八進位、十進位、十六進位

f"{num:b}"	# '10111'
f"{num:o}"	# '27'
f"{num:d}"	# '23'
f"{num:x}"	# '17'

要想實現常用用法的效果,進位規則代碼前需要加#號:

f"{num:#b}"	# '0b10111'
f"{num:#o}"	# '0o27'
f"{num:#d}"	# '23'
f"{num:#x}"	# '0x17'

lambda表達式

>>> f"result is {(lambda x: x**2+1)(5)}"
'result is 26'

日期格式化

日期格式信息,適用於 datedatetimetime 對象

today = datetime.datetime.today()
f"{today:%Y}"			# '2022'
f"{today:%Y-%m}"		# '2022-12'
f"{today:%Y-%m-%d}"		# '2022-12-16'

f"{today:%F}"		# '2022-12-16'
f"{today:%D}"		# '12/16/22'
f"{today:%X}"		# '21:01:27'
f"{today:%F %X}"	# '2022-12-16 21:01:27'

參考

本文來自博客園

作者:奧森iorson

轉載請註明原文鏈接:https://www.cnblogs.com/iorson/p/16989227.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近行程碼下線了,核酸檢測也取消了,但是新冠病毒仍然存在,加上也是流感爆發時期,大家註意防護!!! 陽性無癥狀,你可能並沒有真的感染新冠,新冠病毒是比普通流感病毒要厲害的,會導致發燒的,而且傳染性極強。 新冠病毒一旦入侵你的免疫系統,會瘋狂繁殖,免疫系統會殺不過來的,那咋辦?擺爛,啟動終極保護系統( ...
  • 前言 通過該篇學習了嵌入式的任務調度(即時間片論法)後,瞭解到通過以1ms為調度時間單位輪詢判斷是否需要執行函數任務,那麼下麵介紹如何基於時間片論法的任務調度模式充分利用MCU的資源,姑且先稱這種方式為時間片差分調度法。 充分利用MCU的資源指的是在不影響原有的函數調度情況下合理進行分配,避免MCU ...
  • Kotlin + SpringBoot + JPA 服務端開發 本篇主要介紹一下 kotlin + springboot的服務端開發環境搭建 1.概述 Kotlin 是一個基於JVM的編程語言, 是IDEA開發工具 jetbrains 公司開發的語言,也被google選為android開發的首選語言 ...
  • 家居網購項目實現03 8.功能07-後臺管理 顯示家居 8.1需求分析/圖解 給後臺管理提供獨立登錄頁面,管理員登錄地址不對外公開 管理員登錄成功後,顯示管理菜單頁面 管理員點擊家居管理,顯示所有家居信息 8.2思路分析 ps:實現管理員登錄功能,方案一是將管理員視為member,添加到member ...
  • 完美流程,提供所有安裝包激活碼,解決pycharm安裝激活問題!建議收藏!!! 1.安裝 Pycharm2019.1.3 安裝包下載地址: 鏈接:https://pan.baidu.com/s/10r-sMUJh7YKS_TP05NehCQ?pwd=1234 提取碼:1234 1.1.雙擊運行電腦中 ...
  • 大家好,歡迎來到 Crossin的編程教室 ! 看過我Python入門教程的朋友應該會看到其中有提到一個點球小游戲的作業。 在世界盃決賽即將到來之際,我們再來回顧一下這個小游戲。對於剛剛學習編程不久的同學,這是個不錯的練手習題,可以嘗試自己寫一寫。 【視頻】用Python寫個“點球大戰”小游戲 先說 ...
  • File對象測試數據的讀寫與操作 #def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True): # known special case of open #file ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...