Maison > Article > développement back-end > Présentation enfin de Python 3.9
Python 3.9 est là !
Au cours de l'année écoulée, des développeurs du monde entier ont travaillé sur des améliorations de Python 3.8. Les versions bêta de Python 3.9 existent depuis un certain temps, la première version officielle étant publiée le 5 octobre 2020.
Chaque version de Python contient des fonctionnalités nouvellement développées et améliorées, et Python 3.9 ne fait pas exception.
[groupe d'échange d'apprentissage Python]
Ce qui suit présente plusieurs nouvelles fonctionnalités majeures de Python 3.9.
Le dictionnaire est l'une des structures de données les plus basiques de Python, et avec l'itération des versions de Python, les performances sont continuellement optimisées.
Dans Python 3.9, les opérateurs de fusion (|
) et de mise à jour (|=
) ont été ajoutés à la classe dict
. Ces mises à jour complètent les méthodes dict.update
et {** d1,** d2}
existantes.
Méthode traditionnelle de fusion de dictionnaires :
>>> pycon = {2016: "Portland", 2018: "Cleveland"} # 字典1>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"} # 字典2# 方法一>>> {**pycon, **europython}{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}#方法二>>> merged = pycon.copy>>> for key, value in europython.items:... merged[key] = value...>>> merged{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码
Les deux méthodes fusionnent les dictionnaires sans modifier les données d'origine. Notez que « Cleveland » dans le dictionnaire 1 a été remplacé par « Edinburgh » dans le dictionnaire fusionné 2.
Vous pouvez également mettre à jour le dictionnaire 1 :
>>> pycon.update(europython)>>> pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码
Les nouvelles versions de Python introduisent deux nouveaux opérateurs de dictionnaire : merge (|
) et update (|=
). Vous pouvez utiliser |
pour fusionner deux dictionnaires, et |=
est utilisé pour mettre à jour le dictionnaire :
>>> pycon = {2016: "Portland", 2018: "Cleveland"}>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"}>>> pycon | europython # 合并{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}>>> pycon |= europython # 更新>>> pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码
d1|d2
et {** d1,** d2}
ont des fonctions similaires. Ils sont tous deux utilisés pour fusionner des dictionnaires et prendre des unions. . Lorsque vous rencontrez la même clé, cette dernière écrasera la première.
L'un des avantages de l'utilisation de |
est qu'il fonctionne avec des types de type dictionnaire et conserve le type d'origine après la fusion :
>>> from collections import defaultdict>>> europe = defaultdict(lambda: "", {"Norway": "Oslo", "Spain": "Madrid"})>>> africa = defaultdict(lambda: "", {"Egypt": "Cairo", "Zimbabwe": "Harare"})>>> europe | africadefaultdict(<function <lambda> at 0x7f0cb42a6700>,{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'})>>> {**europe, **africa}{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'}复制代码
|=
met à jour le dictionnaire, comme .update
:
>>> libraries = {... "collections": "Container datatypes",... "math": "Mathematical functions",... }>>> libraries |= {"zoneinfo": "IANA time zone support"}>>> libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support'}复制代码
|=
Vous pouvez également utiliser des structures de données de type dictionnaire pour les mises à jour :
>>> libraries |= [("graphlib", "Functionality for graph-like structures")]>>> libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support','graphlib': 'Functionality for graph-like structures'}复制代码
dans Python 3.9, vous pouvez utilisez .removeprefix
et .removesuffix
pour supprimer respectivement le début ou la fin de la chaîne :
>>> "three cool features in Python".removesuffix(" Python")'three cool features in'>>> "three cool features in Python".removeprefix("three ")'cool features in Python'>>> "three cool features in Python".removeprefix("Something else")'three cool features in Python'复制代码
Certaines personnes diront que la méthode .strip
est également possible, mais cette méthode provoquera une suppression accidentelle :
>>> "three cool features in Python".strip(" Python")'ree cool features i'复制代码
Comme vous pouvez le voir, je veux évidemment supprimer le mot python à la fin, mais une partie du là au début a également été supprimée - Th.
Donc .removeprefix
et .removesuffix
peuvent être plus précis.
zoneinfo est un module nouvellement introduit dans python3.9. Zoneinfo peut accéder à la base de données de fuseau horaire de l'Internet Assigned Numbers Authority (IANA). L'IANA met à jour sa base de données plusieurs fois par an et constitue la source d'informations sur les fuseaux horaires la plus fiable.
En utilisant zoneinfo, vous pouvez obtenir un objet décrivant n'importe quel fuseau horaire dans la base de données :
>>> from zoneinfo import ZoneInfo>>> ZoneInfo("America/Vancouver")zoneinfo.ZoneInfo(key='America/Vancouver') >>> from zoneinfo import ZoneInfo>>> from datetime import datetime, timedelta>>> # 夏令时>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))>>> print(dt)2020-10-31 12:00:00-07:00>>> dt.tzname'PDT'>>> # 标准时间>>> dt += timedelta(days=7)>>> print(dt)2020-11-07 12:00:00-08:00>>> print(dt.tzname)PST复制代码
Dans les astuces de type, vous. peut désormais utiliser les types de collection intégrés (tels que list et dict) comme types génériques sans avoir à importer le type majuscule correspondant (tel que List ou Dict) depuis typing
.
def greet_all(names: list[str]) -> None:for name in names:print("Hello", name)复制代码
Python 3.9 ajoute un nouveau module graphlib, qui contient la classe graphlib.TopologicalSorter
pour fournir des fonctionnalités permettant d'effectuer un tri topologique.
>>> dependencies = {... "realpython-reader": {"feedparser", "html2text"},... "feedparser": {"sgmllib3k"},... }...>>> from graphlib import TopologicalSorter>>> ts = TopologicalSorter(dependencies)>>> list(ts.static_order)['html2text', 'sgmllib3k', 'feedparser', 'realpython-reader']复制代码
Python dispose depuis longtemps d'une fonction permettant de calculer le plus grand diviseur commun (PGCD) de deux nombres :
>>> import math>>> math.gcd(49, 14)7复制代码
Le moins commun multiple (LCM) est lié au plus grand diviseur commun (GCD). LCM peut être défini selon GCD :
>>> def lcm(num1, num2):... if num1 == num2 == 0:... return 0... return num1 * num2 // math.gcd(num1, num2)...>>> lcm(49, 14)98复制代码
Dans Python 3.9, vous n'avez plus besoin de définir votre propre fonction LCM. Il ajoute la fonction de calcul. le multiple le moins commun :
>>> import math>>> math.lcm(49, 14)98复制代码
L'une des fonctionnalités les plus intéressantes de Python 3.9 est une fonctionnalité que tout le monde ne remarquera pas dans la programmation quotidienne, et c'est la mise à jour. de l'analyseur. L'analyseur est le composant de base de l'interpréteur Python. Dans la dernière version, l'analyseur a été reconstruit.
Python a déjà utilisé l'analyseur LL(1) pour analyser le code source dans un arbre d'analyse. Vous pouvez considérer un analyseur LL(1) comme un analyseur qui lit un caractère à la fois et interprète le code source sans revenir en arrière.
Le nouvel interpréteur est implémenté sur la base de PEG (parsing expression grammar), et non de LL(1). Les performances du nouvel analyseur sont comparables à celles de l'ancien analyseur, et PEG est plus flexible que LL(1) lors de la conception de nouvelles fonctionnalités de langage.
Parmi toute la bibliothèque standard, l'analyseur PEG est légèrement plus rapide, mais il utilise également plus de mémoire. En fait, il est difficile de déterminer dans quelle mesure les performances sont bonnes ou mauvaises lors de l'utilisation du nouvel analyseur.
Recommandations d'apprentissage gratuites associées : Tutoriel Python(vidéo)
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!