自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python F-Strings 比你想象的更強大

開發(fā) 后端
這篇文章帶你了解一下f-strings的一些功能,希望你在日常編碼中使用的這些很棒的 f-strings功能。

格式化字符串文字——也稱為f 字符串——自 Python 3.6 以來就已經存在,所以我們都知道它們是什么以及如何使用它們。然而,你可能不知道 f-strings的一些比較實用跟方便的功能。因此讓這篇文章帶你了解一下f-strings的一些功能,希望你在日常編碼中使用的這些很棒的 f-strings功能。

日期和時間格式

使用 f 字符串應用數(shù)字格式非常常見,但你知道你還可以格式化日期和時間戳字符串嗎?

import datetime
today = datetime.datetime.today()
print(f"{today:%Y-%m-%d}")
# 2023-02-03
print(f"{today:%Y}")
# 2023

f-strings 可以像使用datetime.strftime方法一樣格式化日期和時間。當你意識到除了文檔中提到的幾種格式之外還有更多格式時,這非常好。Python strftime還支持底層 C 實現(xiàn)支持的所有格式,這可能因平臺而異,這就是文檔中未提及的原因。話雖如此,你仍然可以利用這些格式并使用例如%F,它等效于%Y-%m-%d%T等效于%H:%M:%S,還值得一提的是%x%X分別是語言環(huán)境首選的日期和時間格式。這些格式的使用顯然不限于 f 字符串。有關時間格式的完整列表請參閱:
https://manpages.debian.org/bullseye/manpages-dev/strftime.3.en.html

變量名和調試

f-string 功能(從 Python 3.8 開始)最近新增的功能之一是能夠打印變量名稱和值:

x = 10
y = 25
print(f"x = {x}, y = {y}")
# x = 10, y = 25
print(f"{x = }, {y = }") # Better! (3.8+)
# x = 10, y = 25

print(f"{x = :.3f}")
# x = 10.000

此功能稱為“調試”,可以與其他修飾符結合使用。它還保留空格,因此f"{x = }"f"{x=}"將產生不同的字符串。

字符串表示

打印類實例時,__str__默認使用類的方法來表示字符串。但是,如果我們想強制使用__repr__,我們可以使用!r轉換標志:

class User:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name

def __str__(self):
return f"{self.first_name} {self.last_name}"

def __repr__(self):
return f"User's name is: {self.first_name} {self.last_name}"

user = User("John", "Doe")
print(f"{user}")
# John Doe
print(f"{user!r}")
# User's name is: John Doe

我們也可以只repr(some_var)在 f 字符串內部調用,但使用轉換標志是一個很好的習慣和簡潔的解決方案。

f-strings杰出的性能表現(xiàn)

強大的功能和語法糖通常會帶來性能損失,但對于 f 字符串而言情況并非如此:

# python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'
from string import Template

x, y = "Hello", "World"

print(f"{x} {y}") # 39.6 nsec per loop - Fast!
print(x + " " + y) # 43.5 nsec per loop
print(" ".join((x, y))) # 58.1 nsec per loop
print("%s %s" % (x, y)) # 103 nsec per loop
print("{} {}".format(x, y)) # 141 nsec per loop
print(Template("$x $y").substitute(x=x, y=y)) # 1.24 usec per loop - Slow!

上面的示例使用timeit如下模塊進行了測試:python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'正如你所看到的,f 字符串實際上是 Python 提供的所有格式化選項中最快的。因此,即使你更喜歡使用一些較舊的格式化選項,你也可以考慮切換到 f-strings 只是為了提高性能。

格式化規(guī)范的全部功能

F-strings 支持 Python 的Format Specification Mini-Language,所以你可以在它們的修飾符中嵌入很多格式化操作:

text = "hello world"

# Center text:
print(f"{text:^15}")
# ' hello world '

number = 1234567890
# Set separator
print(f"{number:,}")
# 1,234,567,890

number = 123
# Add leading zeros
print(f"{number:08}")
# 00000123

Python 的Format Specification Mini-Language不僅僅包括格式化數(shù)字和日期的選項。它允許我們對齊或居中文本、添加前導零/空格、設置千位分隔符等等。所有這些顯然不僅適用于 f 字符串,而且適用于所有其他格式設置選項。

嵌套 f-strings

如果基本的 f-strings 不足以滿足你的格式化需求,你甚至可以將它們相互嵌套:

number = 254.3463
print(f"{f'${number:.3f}':>10s}")
# ' $254.346'

你可以將 f-strings 嵌入 f-strings 中以解決棘手的格式化問題,例如將美元符號添加到右對齊的浮點數(shù),如上所示。

如果你需要在格式說明符部分使用變量,也可以使用嵌套的 f 字符串。這也可以使 f 字符串更具可讀性:

import decimal
width = 8
precision = 3
value = decimal.Decimal("42.12345")
print(f"output: {value:{width}.{precision}}")
# 'output: 42.1'

條件格式

在上面帶有嵌套 f 字符串的示例之上,我們可以更進一步,在內部 f 字符串中使用三元條件運算符:

import decimal
value = decimal.Decimal("42.12345")
print(f'Result: {value:{"4.3" if value < 100 else "8.3"}}')
# Result: 42.1
value = decimal.Decimal("142.12345")
print(f'Result: {value:{"4.2" if value < 100 else "8.3"}}')
# Result: 142

lambda表達式

如果你想突破 f-strings 的限制,同時讓閱讀你代碼的人覺得你很牛逼,那么你可以使用 lambdas

print(f"{(lambda x: x**2)(3)}")
# 9

在這種情況下,lambda 表達式周圍的括號是強制性的,因為:否則將由 f 字符串解釋。

結束語

正如我們在這里看到的,f-strings確實非常強大,并且具有比大多數(shù)人想象的更多的功能。然而,大多數(shù)這些"未知"特性在 Python 文檔中都有提及,因此我建議你不僅閱讀 f-strings,還閱讀你可能使用的任何其他 Python 模塊/特性的文檔頁面。深入研究文檔通常會幫助你發(fā)現(xiàn)一些非常有用的功能。

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-10-19 06:58:57

Python格式化f-strings

2021-12-09 15:25:15

Pythonf-strings字符串

2022-02-15 16:51:57

Pythonf-strings字符串

2019-04-04 13:33:17

2010-05-06 09:23:45

云計算

2012-09-24 11:14:06

PHP編程語言Web開發(fā)

2012-09-20 09:28:26

PHP程序Web

2022-09-19 15:50:10

物聯(lián)網安全工業(yè)4.0

2021-06-09 15:40:47

容器

2020-04-24 09:58:18

數(shù)據(jù)泄露黑客網絡攻擊

2022-03-31 10:39:07

Linuxsudo命令

2023-09-25 14:48:24

Wi-Fi 6

2022-09-25 11:46:52

瀏覽器擴展程序廣告攔截器

2019-01-11 10:00:44

微信騰訊改版

2024-09-27 09:53:22

Rust標準庫優(yōu)化

2022-09-28 07:19:35

瀏覽器安全保證惡意擴展

2021-05-19 14:36:03

數(shù)據(jù)中心

2013-05-29 10:57:34

數(shù)據(jù)中心網絡數(shù)據(jù)中心數(shù)據(jù)中心網絡設置

2022-02-16 10:13:29

數(shù)據(jù)中心芯片連接器

2021-07-25 22:34:33

人工智能作家機器人
點贊
收藏

51CTO技術棧公眾號