Heim  >  Artikel  >  Backend-Entwicklung  >  Python-F-Strings sind leistungsfähiger als Sie denken

Python-F-Strings sind leistungsfähiger als Sie denken

WBOY
WBOYnach vorne
2023-04-17 09:01:021225Durchsuche

Python-F-Strings sind leistungsfähiger als Sie denken

Formatierte String-Literale – auch bekannt als f-Strings – gibt es seit Python 3.6, daher wissen wir alle, was sie sind und wie man sie verwendet. Möglicherweise sind Ihnen jedoch einige der praktischeren und bequemeren Funktionen von F-Saiten nicht bekannt. Lassen Sie sich von diesem Artikel durch einige der Funktionen von F-Strings führen, und hoffentlich werden Sie diese großartigen F-Strings-Funktionen in Ihrer täglichen Codierung verwenden.

Datums- und Uhrzeitformatierung

Das Anwenden von Zahlenformaten mithilfe von F-Strings ist weit verbreitet, aber wussten Sie, dass Sie auch Datums- und Zeitstempel-Strings formatieren können?

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

f-Strings können Datums- und Uhrzeitangaben genau wie mit der Methode datetime.strftime formatieren. Es ist großartig, wenn man erkennt, dass es viel mehr Formate gibt als die wenigen, die in der Dokumentation erwähnt werden. Python strftime unterstützt außerdem alle von der zugrunde liegenden C-Implementierung unterstützten Formate, die von Plattform zu Plattform variieren können, weshalb sie in der Dokumentation nicht erwähnt werden. Allerdings können Sie diese Formate dennoch nutzen und beispielsweise %F verwenden, was %Y-%m-%d entspricht, oder %T, was %H:%M entspricht: %S , es ist auch erwähnenswert, dass %x und %X die bevorzugten Datums- und Uhrzeitformate des Gebietsschemas sind. Die Verwendung dieser Formate ist offensichtlich nicht auf F-Strings beschränkt. Eine vollständige Liste der Zeitformate finden Sie unter:
https://manpages.debian.org/bullseye/manpages-dev/strftime.3.en.html

Variablennamen und Debugging

F-String-Funktionalität (von Python 3.8 Start) Eine der kürzlich hinzugefügten Funktionen ist die Möglichkeit, Variablennamen und -werte zu drucken:

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

Diese Funktion heißt "Debug" und kann mit anderen Modifikatoren kombiniert werden. Außerdem bleiben Leerzeichen erhalten, sodass f"{x = }" und f"{x=}" unterschiedliche Zeichenfolgen erzeugen.

String-Darstellung

Beim Drucken einer Klasseninstanz verwendet __str__default standardmäßig die Klassenmethode, um einen String darzustellen. Wenn wir jedoch die Verwendung von __repr__ erzwingen möchten, können wir das Konvertierungsflag !r verwenden:

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

Wir können auch einfach repr(some_var) innerhalb des f-Strings aufrufen, aber mit dem Die Konvertierungsflagge ist mühsam. Gute Gewohnheiten und eine nette Lösung.

Hervorragende Leistung von F-Strings

Leistungsstarke Funktionen und syntaktischer Zucker gehen oft mit Leistungseinbußen einher, aber das ist bei F-Strings nicht der Fall:

# 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!

Das obige Beispiel verwendet timeit wie folgt: Modul getestet: python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'Wie Sie sehen können, ist der f-String tatsächlich die schnellste aller Formatierungsoptionen bereitgestellt von Python. Selbst wenn Sie also lieber einige der älteren Formatierungsoptionen verwenden möchten, können Sie aufgrund der verbesserten Leistung möglicherweise auf F-Strings umsteigen.

Volle Funktionalität der Formatierungsspezifikationen

F-Strings unterstützen Pythons Format Specification Mini-Language, sodass Sie viele Formatierungsvorgänge in ihre Modifikatoren einbetten können:

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

Pythons Format Specification Mini-Language enthält mehr mehr als nur Optionen zum Formatieren von Zahlen und Datumsangaben. Es ermöglicht uns, Text auszurichten oder zu zentrieren, führende Nullen/Leerzeichen hinzuzufügen, Tausendertrennzeichen festzulegen und vieles mehr. All dies gilt natürlich nicht nur für F-Strings, sondern auch für alle anderen Formatierungsmöglichkeiten.

Verschachtelte F-Strings

Wenn einfache F-Strings für Ihre Formatierungsanforderungen nicht ausreichen, können Sie sie sogar ineinander verschachteln:

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

你可以将 f-strings 嵌入 f-strings 中以解决棘手的格式化问题,例如将美元符号添加到右对齐的浮点数,如上所示。

如果你需要在格式说明符部分使用变量,也可以使用嵌套的 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确实非常强大,并且具有比大多数人想象的更多的功能。然而,大多数这些"未知"特性在 Python 文档中都有提及,因此我建议你不仅阅读 f-strings,还阅读你可能使用的任何其他 Python 模块/特性的文档页面。深入研究文档通常会帮助你发现一些非常有用的功能。

Das obige ist der detaillierte Inhalt vonPython-F-Strings sind leistungsfähiger als Sie denken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen