日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PythonF-Strings比你想象的更強(qiáng)大

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

日期和時(shí)間格式

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

變量名和調(diào)試

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

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

字符串表示

打印類實(shí)例時(shí),__str__默認(rèn)使用類的方法來表示字符串。但是,如果我們想強(qiáng)制使用__repr__,我們可以使用!r轉(zhuǎn)換標(biāo)志:

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 字符串內(nèi)部調(diào)用,但使用轉(zhuǎn)換標(biāo)志是一個(gè)很好的習(xí)慣和簡潔的解決方案。

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

強(qiáng)大的功能和語法糖通常會(huì)帶來性能損失,但對(duì)于 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如下模塊進(jìn)行了測(cè)試:python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'正如你所看到的,f 字符串實(shí)際上是 Python 提供的所有格式化選項(xiàng)中最快的。因此,即使你更喜歡使用一些較舊的格式化選項(xiàng),你也可以考慮切換到 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ù)字和日期的選項(xiàng)。它允許我們對(duì)齊或居中文本、添加前導(dǎo)零/空格、設(shè)置千位分隔符等等。所有這些顯然不僅適用于 f 字符串,而且適用于所有其他格式設(shè)置選項(xiàng)。

嵌套 f-strings

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

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

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

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

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

條件格式

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

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表達(dá)式

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

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

在這種情況下,lambda 表達(dá)式周圍的括號(hào)是強(qiáng)制性的,因?yàn)?否則將由 f 字符串解釋。

結(jié)束語

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


名稱欄目:PythonF-Strings比你想象的更強(qiáng)大
文章網(wǎng)址:http://www.dlmjj.cn/article/cdjiiop.html