J'ai publié un article résumant le contenu des nouveautés de Python 3.5.
Le cycle de sortie a duré un an, et quand j'ai pensé que 3.9 venait de sortir l'autre jour, a2 de 3.10 était déjà sorti (transpiration). Comme je l'ai écrit dans ici, la prochaine version alpha sortira en même temps que la version officielle, donc c'est comme prévu, mais le rythme est un peu plus rapide. (^^;
Néanmoins, je suis curieux de savoir ce qui sortira dans la prochaine version, alors j'aimerais l'extraire et le résumer. La prochaine version de 3.9 est 3.10 au lieu de 4.0 (rires). Tout d'abord, la feuille de route de développement habituelle (PEP-619).
Si cela se passe comme prévu, 3.10 sortira en octobre 2021, juste un an après 3.9.
2020.11.07
Première version. a2 est sorti le 2020-10-04, mais j'écris en fonction des nouveautés.
En tant que nouvelle fonctionnalité de Python-3.7, "[Retarder l'évaluation des annotations](https://qiita.com/ksato9700/items/35a0bdc04693b3b09757#pep-563-%E3%82%A2%E3%83%8E%E3%83 % 86% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E3% 81% AE% E8% A9% 95% E4% BE% A1% E3% 82% 92 % E9% 81% 85% E3% 82% 89% E3% 81% 9B% E3% 82% 8B) ", mais ce comportement est désormais le comportement par défaut. Donc, jusqu'à présent, pour permettre une évaluation différée
from __future__ import annotations
Il était nécessaire de mettre la déclaration d'importation, mais à partir de 3.10, ce ne sera pas nécessaire. Au moment de la version 3.7, il était écrit que "cela deviendra le standard de Python-4.0", mais c'était la version 3.10.
Et certaines des fonctions du système d'annotation de type ont changé. L'un est le comportement de inspect.signature
, qui renvoie le type lui-même au lieu de renvoyer la représentation sous forme de chaîne du type. Par exemple, si vous essayez d'afficher le type de paramètre d'une fonction avec le code suivant
from __future__ import annotations
import inspect
def func_a(a: int, b: list, c: C):
pass
class C:
pass
sig = inspect.signature(func_a)
for (name, param) in sig.parameters.items():
print(name, repr(param.annotation))
Avant Python-3.9
a 'int'
b 'list'
c 'C'
Une chaîne de caractères est renvoyée comme, mais à partir de python-3.10
a <class 'int'>
b <class 'list'>
c <class '__main__.C'>
Un objet de classe de type sera retourné sous la forme de. Si la classe C
n'est pas trouvée, la chaîne'C'
sera renvoyée comme avant.
Les alias de type (types d'alias) ont été introduits dans PEP 484, mais sont représentés par des expressions d'affectation de premier niveau. Par conséquent, le problème était qu'il était difficile de la distinguer de l'affectation à une variable normale. Une annotation appelée «TypeAlias» est ajoutée pour indiquer clairement qu'il s'agit d'un alias de type.
Par exemple, jusqu'à présent
IntType = int
Ce qui a été écrit
IntType: TypeAlias = int
Vous pourrez écrire comme ça.
Il s'agit également d'un changement de relation de type, mais jusqu'à présent, lors de l'annotation de type de variables qui prennent deux types ou plus
number: Union[int, float]
Où je devais écrire
number: int | float
Vous pourrez écrire. On a l'impression d'incorporer la notation qui est également utilisée dans TypeScript.
Un paramètre appelé «stric» est ajouté à la fonction «zip ()», et quand c'est «True», il vérifie que les deux itérables à compresser sont de la même longueur. Si les longueurs sont différentes, une exception ValueError
sera levée.
Une méthode appelée bit_count ()
a été ajoutée à une variable de type int
. Ceci renvoie le nombre de «1» lorsque la valeur numérique de l'entier est exprimée en binaire. Il semble que cela s'appelle aussi Population Count (ou pop count), mais fondamentalement, c'est la même chose que de faire bin (a) .count ('1')
, et cela peut être traité plus rapidement. Il semble que ce soit devenu.
L'objet de vue retourné par les méthodes de type dictionnaire keys ()
, values ()
et items ()
a un attribut appelé mapping
, qui permet d'accéder aux données de type dictionnaire d'origine.
Decimal et Fraction ne peuvent plus être utilisés comme valeurs d'argument entier. Par exemple, dans Python-3.9., Le code suivant a émis DeprecationWarning
, mais à partir de python-3.10, une erreur se produit.
from decimal import Decimal
i = Decimal(97)
print(chr(i))
(Pas encore)
base64
Base64.b43hexencode ()
et base64. Pour prendre en charge l'alphabet Hex étendu défini dans la [RFC-4648](https://tools.ietf.org/html/rfc4648.html#section-7) b43hexdecode ()
a été ajouté. L'alphabet Base32 standard n'utilise pas '0' et '1' qui ressemblent à d'autres caractères, mais cet alphabet hexadécimal étendu les utilise et les mappe à la place. Il se caractérise par le fait que les personnages sont triés dans l'ordre (bien que ce soit un mystère ce qui me rend heureux).
curses
Vous pourrez utiliser les couleurs étendues introduites dans ncurses 6.1. Vous pouvez vérifier si la bibliothèque ncurses utilisée depuis Python prend en charge cela avec curses.has_extended_color_support ()
.
glob
Les paramètres root_dir
et dir_fd
ont été ajoutés àglob ()
etiglob ()
pour vous permettre de spécifier le répertoire racine des recherches de fichiers. Le premier est un objet de type chemin et le second spécifie le descripteur de fichier du répertoire racine.
types
types.EllipsisType
, types.NoneType
, types.NotImplementedType
ont été (ré) introduits.
str ()
bytes ()
bytesarray ()
est plus rapide (30-40% pour les petits objets)runpy
importe moins de modules et le temps de démarrage est en moyenne 1,3 fois plus rapide lorsqu'il est exécuté avec python -m module name
.find_loader ()
, find_module ()
, load_module ()
, __package__
et __loader__
seront supprimés dans une version ultérieure. class
int,
float,
floordiv,
mod,
divmod,
rfloordiv,
rmod,
rdivmod` ont été supprimées.Voici un résumé des modifications apportées à Python 3.10. Il reste encore 11 mois avant la sortie officielle de a2, donc je pense qu'il y aura des changements dans le futur, mais j'aimerais rester au courant.
Recommended Posts