Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction

Qu'est-ce que l'opérateur Seiuchi?

L'autre jour, alors que je regardais la tendance des articles sur Qiita, j'ai vu quelque chose qui s'appelait "Seiuchi Operator". L'opérateur Seiuchi lui-même est une nouvelle syntaxe pour Python, mais je n'ai pas vraiment suivi les dernières spécifications. Dans le passé, j'ai écrit un article "Peut-être que je ne connais pas le monde de la grammaire mineure Python", mais je souhaite mettre à jour mes connaissances bientôt. J'ai donc décidé de suivre la grammaire récemment ajoutée. Si vous touchez simplement le langage de programmation, vous pouvez généralement faire quelque chose si vous vous en souvenez pour, si, la définition de fonction, la définition de classe, mais si vous voulez l'écrire brièvement et proprement, il est très efficace d'utiliser une syntaxe dédiée. Pour moi, j'aime Python car c'est un excellent choix. Je ne vais pas tout présenter ici, mais cela me semble facile à utiliser. Je ne retiendrai que ce que je pense.

PEP 448-Généralisation au déballage addable

PEP 448 étend l'utilisation de l'opérateur de décompression * itérable et de l'opérateur de décompression du dictionnaire **. Peut maintenant être utilisé avec n'importe quel nombre de décompressage dans les appels de fonction:

Hey. J'ai pensé. Par exemple, dans la série Python 2.7, le comportement est le suivant.

>>> def f(a,b,c,d):
...     return 1
...
>>> f(*[0,1,2,3])
1
>>> f(*[0,1],*[2,3])
  File "<stdin>", line 1
    f(*[0,1],*[2,3])
             ^
SyntaxError: invalid syntax

Lors de l'appel d'une fonction lors de la décompression d'une liste en utilisant * de cette manière, une seule liste pouvait être spécifiée. Cependant, depuis Python 3.5, plus d'un fonctionne.

>>> def f(a,b,c,d):
...     return 1
...
>>> f(*[0,1,2,3])
1
>>> f(*[0,1],*[2,3])
1

Oh. La documentation officielle de Python comprend également des exemples de taples et de dictionnaires, tels que:

>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}

>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}

Ce qui est un peu intéressant, c'est que vous pouvez également créer un générateur comme range (4).

Introduit: Python3.5

PEP 498: chaîne littérale formatée

Les littéraux de chaîne formatés sont similaires aux chaînes formatées avec str.format () avec le préfixe «f». Ceux-ci ont des champs de remplacement entourés d'accolades. Les champs de substitution sont des expressions évaluées au moment de l'exécution et formatées par le protocole format ():

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

C'est généralement pratique. S'il s'agit d'une chaîne de caractères avec «f» au début, elle étendra la chaîne de caractères simplement en l'écrivant au format «{nom}». C'était autrefois une main courte

name = "Fred"
"He said his name is {name}.".format(**locals())

J'ai pu écrire quelque chose comme ça, mais si c'est une façon si ennuyeuse d'écrire, % est bien. Je ne l'ai pas utilisé. Cependant, avec l'introduction de la chaîne de caractères f, le nombre de frappes est extrêmement réduit.

La formule Python a également couvert un exemple complexe d'imbrication de la partie {}.

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'

Cependant, après un petit essai, il ne se développe pas de nouveau après l'avoir placé dans la variable.

>>> template = "{name}"
>>> f"{template}"
'{name}'

(Eh bien, si vous essayez de faire cela, il semble que le réglage sera complet avec juste la chaîne de caractères f ...)

Introduction: Python3.6

PEP 515: trait de soulignement en littéral numérique

PEP 515 permet l'utilisation de traits de soulignement dans les littéraux numériques pour une meilleure lisibilité.

>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

Eh bien, je ne l'utilise pas beaucoup dans les affaires ... Cependant, quand je fais le tour de la boucle dans un système de calcul numérique, il est difficile de dire si c'est 100 000 ou 1 million, donc c'est bien.

Introduction: Python3.6

PEP 553: point d'arrêt intégré ()

Ce n'est pas une grammaire, mais je vais la présenter car c'est très pratique pour le débogage.

break.py


i = 1
print(i)
breakpoint()
i += 1
print(i)

Supposons que vous écriviez le code. Quand tu fais ça,

$ python break.py
1
> /home/kotauchisunsun/work/python_practice/break.py(4)<module>()
-> i += 1
(Pdb) i
1

De cette façon, lorsque vous appelez breakpoint (), pdb démarrera et vous pourrez vérifier le contenu des variables. Cela n'a pas vraiment d'importance si l'EDI est intégré, mais cela peut être utile si vous voulez simplement le faire à partir de la ligne de commande.

Introduit: Python 3.7

Enregistrer l'ordre d'insertion des objets dict

La propriété de préserver l'ordre d'insertion des objets dict a été officiellement déclarée comme faisant partie de la spécification du langage Python.

Comme je l'ai appris dans l'article Nouvelles fonctionnalités favorites de Python 3.7, ** les types de dictionnaires sont désormais enregistrés dans l'ordre. ** Vraiment?

Pour python2.7

$ python2.7
Python 2.7.17 (default, Nov  7 2019, 10:07:09)
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> {"c":1,"b":2,"a":3}.keys()
['a', 'c', 'b']
>>> {"a":1,"b":2,"c":3}.keys()
['a', 'c', 'b']

Pour la série python3.8

$ python
Python 3.8.0 (default, Jun 27 2020, 00:43:29)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> {"c":1,"b":2,"a":3}.keys()
dict_keys(['c', 'b', 'a'])
>>> {"a":1,"b":2,"c":3}.keys()
dict_keys(['a', 'b', 'c'])

Auparavant, il y avait ʻOrderedDict` dans les collections en tant que classe qui lui était dédiée, mais dict est dans l'ordre d'insertion, n'est-ce pas? C'est une bonne chose, mais ** à l'inverse, il semble que vous serez accro au code écrit en supposant la série Python 3.7 lorsque vous l'amenez dans la série Python 3.5. ** Il semble préférable de garder ce changement à l'esprit.

Introduit: Python 3.7

Opérateur Seiuchi

Dans le cadre de la syntaxe plus large, une nouvelle syntaxe: = a été ajoutée pour attribuer des valeurs aux variables. Cette syntaxe ressemble aux yeux et aux crocs d'un seiuchi, d'où le surnom d '«opérateur seiuchi».

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

Hmmm cet exemple officiel? Je n'étais pas si heureux, mais l'exemple suivant était bon.

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]

Cet exemple est bon. Je pensais que c'était l'ancienne façon d'écrire

normailze_name_list = map(x: normalize('NFC',x),names)
clean_name_list = filter(x: x in allowed_names, normalize_name_list)
[x.title() for x in clean_name_list]

Il y avait beaucoup de parties redondantes telles que la façon d'écrire, mais je peux l'écrire brièvement et proprement. De temps en temps, je voulais introduire le résultat utilisé pour le jugement comme une instruction if de l'expression d'inclusion en tant qu'élément, donc c'est assez agréable.

Introduit: Python3.8

Représenter un objet avec = en f-string

Le spécificateur = est désormais activé pour les littéraux de chaîne formatés (chaîne f). Une f-string, telle que f '{expr =}', est affichée dans l'ordre de l'expression écrite en f-string, le symbole égal et la représentation sous forme de chaîne de l'expression évaluée.

user = 'eric_idle'
member_since = date(1975, 7, 31)
f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

Pour moi, j'ai pensé: "Pourquoi ...", mais il semble que cela ait été introduit. Mon opinion personnelle négative est que cela ne fonctionne essentiellement que pour le débogage, et c'est une syntaxe qui ne rentre pas vraiment dans le code de production, donc hmm. J'ai pensé. Y a-t-il une autre utilisation? Je suis allé voir la discussion originale, mais il semble que ce soit principalement pour le débogage.

https://bugs.python.org/issue36817

Introduit: Python3.8

Impressions

Quand je regarde un langage relativement nouveau, les génériques n'entrent pas. Ou, l'opérateur de coalescence nul est. Qu'en est-il de l'opérateur Elvis? J'entends des histoires comme ça, mais Python n'écoute pas ce genre d'histoire. C'était l'impression que. L'indication de type est certainement une grande histoire, mais c'est une histoire facultative, et async / await n'a pas été beaucoup utilisé par les individus et n'était pas intéressant. Pendant ce temps, une chose étrange appelée l'opérateur Seiuchi entre dans Python. J'étais un peu intrigué, alors j'ai cherché. J'espère que vous connaissez la grammaire ici. Je pense qu'il n'est pas inclus dans le livre d'introduction. Connaissez-vous de telles choses au fur et à mesure ou connaissez-vous des articles comme celui-ci? C'est une tâche assez difficile. Je pense.

référence

https://docs.python.org/ja/3.5/whatsnew/3.5.html https://docs.python.org/ja/3.6/whatsnew/3.6.html https://docs.python.org/ja/3.7/whatsnew/3.7.html https://docs.python.org/ja/3.8/whatsnew/3.8.html

Recommended Posts

Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction
Nouvelles fonctionnalités de Python 3.4.0 (3) - Fonctions génériques à distribution unique
Comparer la grammaire de base de Python et Go d'une manière facile à comprendre
À propos de la différence entre "==" et "is" en python
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
Recevez le formulaire en Python et faites diverses choses
Comprenez attentivement la distribution exponentielle et dessinez en Python
Tracer et comprendre la distribution normale multivariée en Python
[Selenium] Ouvrez le lien dans un nouvel onglet et déplacez-le [Pilote Python / Chrome]
Comprendre attentivement la distribution de Poisson et dessiner en Python
Ne pas être conscient du contenu des données en python
Trouvez la matrice Hermite et ses valeurs uniques en Python
Quoi de neuf dans Python 3.5
Nouveau dans Python 3.4.0 (1) --pathlib
Implémentation de l'algorithme "Algorithm Picture Book" en Python3 (Heap Sort Edition)
Quoi de neuf dans Python 3.6
Test.py n'est pas reflété sur le serveur Web dans Python3.
Obtenez et créez des nœuds ajoutés et mis à jour dans la nouvelle version
Obtenez le type MIME en Python et déterminez le format de fichier
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Implémentation de l'algorithme de "Algorithm Picture Book" en Python3 (Bubble Sort)
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Manipulez le presse-papiers en Python et collez le tableau dans Excel
J'ai essayé de programmer le test du chi carré en Python et Java.
[Python] Afficher le temps écoulé en heures, minutes et secondes (00:00:00)
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Le websocket de toio (nodejs) et python / websocket ne se connecte pas.
Je veux connaître la nature de Python et pip
[Astuces] Problèmes et solutions dans le développement de python + kivy
Implémentation de l'algorithme «Algorithm Picture Book» en Python3 (tri sélectif)
[Python3] "A // B" et "math.floor (A / B)" ne sont pas toujours les mêmes! ??
Trouvons un graphique de la distribution de Poisson et de la distribution cumulative de Poisson en Python et Java, respectivement.
Trouver des erreurs en Python
Installation de Python et grammaire de base
Pile et file d'attente en Python
Unittest et CI en Python
Nouveau dans Python 3.4.0 (2) --enum
Nouveautés de Python 3.9 (Résumé)
À propos des fonctionnalités de Python
Installation de Python (Python 3.7.7) et grammaire de base
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Comptez bien le nombre de caractères thaïlandais et arabes en Python
Accédez à l'API New Relic en Python pour obtenir l'état du serveur
[Python3] Enregistrez la matrice de moyenne et de covariance dans json avec les pandas
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
L'histoire selon laquelle le remplacement de la liste bidimensionnelle n'a pas fonctionné en python
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)
Obtenez le titre et la date de livraison de Yahoo! News en Python
Comment afficher les octets de la même manière en Java et Python
[Python / Jupyter] Traduisez le commentaire du programme copié dans le presse-papiers et insérez-le dans une nouvelle cellule.
L'histoire de Python et l'histoire de NaN
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Obtenir l'API arXiv en Python
Différence entre list () et [] en Python
Comparaison de la grammaire de base entre Java et Python
Différence entre == et est en python