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 é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
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 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
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
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
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
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
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.
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