Maison  >  Article  >  développement back-end  >  Les F-Strings Python sont plus puissantes que vous ne le pensez

Les F-Strings Python sont plus puissantes que vous ne le pensez

WBOY
WBOYavant
2023-04-17 09:01:021278parcourir

Les F-Strings Python sont plus puissantes que vous ne le pensez

Les chaînes littérales formatées – également connues sous le nom de chaînes f – existent depuis Python 3.6, nous savons donc tous ce qu'ils sont et comment les utiliser. Cependant, vous ne connaissez peut-être pas certaines des fonctionnalités les plus pratiques et les plus pratiques des f-strings. Laissez donc cet article vous présenter certaines des fonctionnalités des f-strings, et j'espère que vous utiliserez ces excellentes fonctionnalités des f-strings dans votre codage quotidien.

Formatage de la date et de l'heure

L'application de formats de nombres à l'aide de chaînes F est très courante, mais saviez-vous que vous pouvez également formater des chaînes de date et d'horodatage ?

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

f-strings peut formater les dates et les heures, tout comme en utilisant la méthode datetime.strftime. C'est génial de se rendre compte qu'il existe bien plus de formats que les quelques mentionnés dans la documentation. Python strftime prend également en charge tous les formats pris en charge par l'implémentation C sous-jacente, qui peuvent varier d'une plateforme à l'autre, c'est pourquoi cela n'est pas mentionné dans la documentation. Cela dit, vous pouvez toujours profiter de ces formats et utiliser par exemple %F qui équivaut à %Y-%m-%d ou %T qui équivaut à %H:%M : %S , il convient également de mentionner que %x et %X sont respectivement les formats de date et d'heure préférés des paramètres régionaux. L’utilisation de ces formats ne se limite évidemment pas aux f-strings. Pour une liste complète des formats d'heure, voir :
https://manpages.debian.org/bullseye/manpages-dev/strftime.3.en.html

Noms de variables et débogage

Fonctionnalité de chaîne f (de Python 3.8 Démarrer) L'une des fonctionnalités récemment ajoutées est la possibilité d'imprimer les noms et les valeurs des variables :

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

Cette fonctionnalité s'appelle "debug" et peut être combinée avec d'autres modificateurs. Il préserve également les espaces, donc f"{x = }" et f"{x=}" produiront des chaînes différentes.

Représentation de chaîne

Lors de l'impression d'une instance de classe, __str__default utilise la méthode de classe pour représenter une chaîne. Cependant, si nous voulons forcer l'utilisation de __repr__, nous pouvons utiliser le drapeau de conversion !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

Nous pouvons aussi simplement appeler repr(some_var) à l'intérieur de la f-string, mais en utilisant le L'indicateur de conversion est un problème. De bonnes habitudes et des solutions soignées.

Performances exceptionnelles des f-strings

Les fonctionnalités puissantes et le sucre syntaxique entraînent souvent une pénalité en termes de performances, mais ce n'est pas le cas avec les f-strings :

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

L'exemple ci-dessus utilise timeit comme suit Module testé : python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'Comme vous pouvez le voir, la chaîne f est en fait la plus rapide de toutes les options de formatage fourni par Python. Ainsi, même si vous préférez utiliser certaines des anciennes options de formatage, vous pouvez envisager de passer aux f-strings uniquement pour améliorer les performances.

Fonctionnalité complète des spécifications de formatage

Les chaînes F prennent en charge le Mini-langage de spécification de format de Python, vous pouvez donc intégrer de nombreuses opérations de formatage dans leurs modificateurs :

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

Le Mini-langage de spécification de format de Python comprend plus que de simples options de formatage des nombres et des dates. Il nous permet d'aligner ou de centrer le texte, d'ajouter des zéros/espaces non significatifs, de définir des séparateurs de milliers, et bien plus encore. Tout cela s’applique évidemment non seulement aux f-strings, mais à toutes les autres options de formatage.

F-strings imbriquées

Si les f-strings de base ne suffisent pas à vos besoins de formatage, vous pouvez même les imbriquer les unes dans les autres :

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 模块/特性的文档页面。深入研究文档通常会帮助你发现一些非常有用的功能。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer