La chaîne Python devient une chaîne f par défaut (peut-être)

introduction

Le Python Language Summit 2020 s'est tenu les 15 et 16 avril. Il s'agit d'une réunion où les développeurs d'implémentations Python (PyPy, etc. en plus du CPython original) rassemblent, plutôt qu'un simple endroit pour se présenter, une réunion pour discuter de l'état actuel et de l'avenir du langage lui-même et des bibliothèques standard et viser un accord. Et cela.

En raison de la propagation du virus corona cette année, il semble qu'il se soit déroulé en ligne sans exception, mais en regardant l'agenda pendant deux jours, c'est assez intéressant.

En cela, j'ai repris le premier "Créer toutes les chaînes de caractères f chaînes de caractères" et [Ce billet de blog](https://pyfound.blogspot.com/2020/04/all-strings- Je voudrais résumer brièvement le type de discussion qui a été fait sur la base de devenir-f-strings-python.html)

Qu'est-ce qu'une chaîne de caractères f?

Avant d'entrer dans la discussion, examinons ce qu'est la chaîne f. La chaîne f est une fonctionnalité introduite dans Python 3.6 qui place des variables et des expressions dans une partie de la chaîne et les remplace à l'exécution.

Par exemple

>>> x = 1
>>> print(f"La valeur de x est{x}est")
La valeur de x est 1

Ce sera. Si vous essayez de faire quelque chose de similaire avant l'introduction de la chaîne f

print("La valeur de x est%ré" % x)

Ou

print("La valeur de x est{}est".format(x))

Je le faisais. Dans tous les cas, l'endroit à remplacer par la variable et l'endroit où spécifier la variable étaient séparés, ce qui était difficile à comprendre et était une partie où des bogues étaient susceptibles de se produire. Cela est devenu plus facile à la fois avec l'introduction de la chaîne de caractères f.

Dans d'autres langues, par exemple JavaScript

let x = 1
console.log(`La valeur de x est${x}est`)

Vous pouvez écrire cela, et Ruby, Scala, C #, etc. ont des fonctions similaires, il semble donc que vous soyez dans la marée du temps.

La fonction de la chaîne f a été légèrement étendue dans Python 3.8, par exemple.

>>> x = 1
>>> y = 2
>>> print(f"{x=}, {y=}, {x+y=}")
x=1, y=2, x+y=3

Peut être fait. En d'autres termes, en ajoutant = à la fin de {}, non seulement la valeur de la variable ou de l'expression mais aussi la variable ou l'expression elle-même seront incluses dans la sortie. C'est utile pour un peu de débogage, donc cela vaut la peine de s'en souvenir.

Discussion au Sommet du langage Python 2020

Chaîne f très utile comme ci-dessus. Il semble que certaines personnes soient passées de Python 2 à Python 3 à cause de cela, mais comme il est utilisé plus souvent, le mécontentement est apparu. La discussion pour le résoudre est le premier ordre du jour du Python Language Summit 2020. L'ordre du jour a été soumis par Eric Smith, qui a initialement écrit le PEP pour l'introduction des chaînes de caractères en 2015.

C'est le problème auquel nous sommes confrontés ici.

>>> x = 1
>>> print("La valeur de x est{x}est")
La valeur de x est{x}est

Comprenez vous? "Oh, j'ai oublié de mettre le f devant la chaîne (^^; "".

Pour éviter cette erreur, il a vu un programmeur qui préfixe chaque chaîne avec un «f», avec ou sans substitution de variable. Donc sa suggestion est

"Faire de la chaîne une chaîne F par défaut"

C'est. En fait, lors de l'introduction de la chaîne f en 3.6, il semble que c'était une telle proposition au début, mais elle a été rejetée parce que c'était un changement destructeur qui était trop grand, et il s'est installé au f actuel.

Cette proposition utilise la chaîne de caractères f avec ou sans «f», et introduit une «chaîne de caractères p» supplémentaire, et si la chaîne de caractères est précédée de «p», les caractères précédents Il a été traité comme une colonne. Il n'y a aucune détérioration des performances en raison de cela.

D'autre part, l'inventeur Smith sait également qu'il y a certains problèmes, par exemple, il doit introduire un nouveau préfixe de chaîne tel que «p». De plus, ce sera un grand changement

from __future__ import all_fstrings

Je veux activer cela uniquement lorsqu'il y a une instruction d'importation qui dit. Eh bien, si vous le faites, vous ne pourrez pas le supprimer facilement, cette proposition a donc été rejetée.

Les participants ont commenté cette proposition.

Yarko Tymciurak a posé la question: "Pourquoi et comment expliquez-vous" p "aux débutants?" Smith a admis que «p» rendrait la spécification du langage un peu compliquée », mais a répondu:« en réalité, «p» n'est pas beaucoup utilisé et l'explication est assez explicite. C'était.

Certains participants étaient prêts à faire ce changement, et Brett Cannon a déclaré que «l'élimination du préfixe« f »faciliterait l'apprentissage de Python pour les débutants».

Larry Hastings a déclaré: "Les chaînes PHP ont ce genre de spécification, et je pense que les script boys aiment vraiment ça." Mais il a dit: "Oups, j'ai oublié d'ajouter f." Pour éviter cela, je pense que c'est une erreur que vous remarquerez tout de suite, mais changez-vous les spécifications linguistiques juste pour cela? "

De nombreux participants ont convenu que la chaîne f aurait dû être la valeur par défaut depuis le début, mais Paul Moore, Guido van Rossum (le fondateur de Python) et d'autres sont plus nuisibles que rentables. J'avais peur que ça grandisse. Et cet agenda s'est terminé par la poursuite de la discussion en ML.

Résumé

Personnellement, je suis d'accord pour faire de la chaîne f la chaîne par défaut, mais je pensais que ce ne serait pas si facile. C'était un petit article de blog, mais je pense que c'était bien de voir les participants discuter attentivement des changements apportés aux spécifications linguistiques tout en considérant divers aspects.

Recommended Posts

La chaîne Python devient une chaîne f par défaut (peut-être)
[Python] La chaîne de caractères f doit être utilisée pour incorporer la chaîne de caractères
Jugement des nombres premiers par Python
piège d'argument par défaut de python
Mémo de visualisation par Python
Traitement de la communication par Python
Comportement des arguments par défaut de Python
Réponse de Beamformer par python
Comparer des chaînes en Python
Inverser les chaînes en Python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère