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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-04-17 09:01:02
nach vorne
1348 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!
Nach dem Login kopieren

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

你可以将 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'
Nach dem Login kopieren

条件格式

在上面带有嵌套 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
Nach dem Login kopieren

lambda表达式

如果你想突破 f-strings 的限制,同时让阅读你代码的人觉得你很牛逼,那么你可以使用 lambdas

print(f"{(lambda x: x**2)(3)}")
# 9
Nach dem Login kopieren

在这种情况下,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!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage