Maison > Article > développement back-end > 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.
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
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.
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.
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.
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.
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
如果你想突破 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!