Python 3.9 ist da!
Im vergangenen Jahr haben Entwickler aus aller Welt an Verbesserungen für Python 3.8 gearbeitet. Betaversionen von Python 3.9 gibt es schon seit einiger Zeit, wobei die erste offizielle Version am 5. Oktober 2020 veröffentlicht wurde.
Jede Python-Version enthält neu entwickelte und verbesserte Funktionen, und Python 3.9 ist keine Ausnahme.
【Python-Lernaustauschgruppe】
Im Folgenden werden einige wichtige neue Funktionen von Python 3.9 vorgestellt.
1. Dictionary (Merge & Update)-Operator
In Python 3.9 wurden die Operatoren merge (|
) und update (|=
) zur Klasse dict
hinzugefügt. Diese Aktualisierungen vervollständigen die vorhandenen Methoden dict.update
und {** d1, ** d2}
.
Traditionelle Methode zum Zusammenführen von Wörterbüchern: |
)和更新(|=
)运算符已添加到dict
类中。这些更新完善了现有的dict.update
和{** d1,** d2}
方法。
传统合并字典的方法:
>>> 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'}复制代码
这两种方法都合并了字典而不更改原始数据。请注意,字典1中“Cleveland”已被合并的字典2中“Edinburgh”覆盖。
你也可以更新字典1:
>>> pycon.update(europython)>>> pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码
新版本的Python引入了两个新的字典运算符:合并(|
)和更新(|=
)。你可以使用|
合并两个字典,而|=
用于更新字典:
>>> 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
和{** d1,** d2}
的作用类似,都用于合并字典取并集,遇到相同key,后者会将前者覆盖。
使用|
的优势之一是它适用于类似字典的类型,并在合并后保持原来的类型:
>>> 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'}复制代码
|=
的作用是更新字典,类似于.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'}复制代码
|=
还可以将类似字典的数据结构用于更新:
>>> 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'}复制代码
在Python 3.9中,可以使用.removeprefix
和.removesuffix
分别删除字符串的开头或结尾:
>>> "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'复制代码
有人会说.strip
方法也可以呀,但是该方法会出现误删操作:
>>> "three cool features in Python".strip(" Python")'ree cool features i'复制代码
可以看到,明明想删掉结尾的单词python,但是开头的there也被删除了一部分-Th。
所以.removeprefix
和.removesuffix
可能更精准一些。
zoneinfo是python3.9新引入的模块,zoneinfo可以访问Internet号码分配机构(IANA)时区数据库。IANA每年都会多次更新其数据库,这是时区信息的最权威来源。
使用zoneinfo,可以获得数据库中描述任何时区的对象:
>>> 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复制代码
在类型提示中,现在可以将内置集合类型(例如list和dict)用作泛型类型,而不必从typing
中导入相应的大写类型(例如List或Dict)。
def greet_all(names: list[str]) -> None:for name in names:print("Hello", name)复制代码
Python 3.9添加了一个新的模块graphlib,其中包含graphlib.TopologicalSorter
>>> dependencies = {... "realpython-reader": {"feedparser", "html2text"},... "feedparser": {"sgmllib3k"},... }...>>> from graphlib import TopologicalSorter>>> ts = TopologicalSorter(dependencies)>>> list(ts.static_order)['html2text', 'sgmllib3k', 'feedparser', 'realpython-reader']复制代码
>>> import math>>> math.gcd(49, 14)7复制代码
|
) und update (|=
). Sie können |
verwenden, um zwei Wörterbücher zusammenzuführen, während |=
zum Aktualisieren des Wörterbuchs verwendet wird:
>>> def lcm(num1, num2):... if num1 == num2 == 0:... return 0... return num1 * num2 // math.gcd(num1, num2)...>>> lcm(49, 14)98复制代码
d1|d2
und {* * d1, ** d2
haben ähnliche Funktionen. Sie werden beide zum Zusammenführen von Wörterbüchern und zum Annehmen von Vereinigungen verwendet. Wenn sie auf denselben Schlüssel stoßen, überschreibt letzterer den ersteren. Einer der Vorteile der Verwendung von |
besteht darin, dass es mit wörterbuchähnlichen Typen funktioniert und den ursprünglichen Typ nach dem Zusammenführen beibehält: >>> import math>>> math.lcm(49, 14)98复制代码
|=
aktualisiert das Wörterbuch, ähnlich zu .update
: rrreee
|=
Sie können für Aktualisierungen auch wörterbuchähnliche Datenstrukturen verwenden: rrreee
In Python 3.9 können Sie .removeprefix
und .removesuffix
verwenden, um den Anfang bzw. das Ende einer Zeichenfolge zu entfernen:
Someone I Ich werde sagen, dass die Methode .strip
ebenfalls möglich ist, diese Methode jedoch zu versehentlichem Löschen führt:
Sie können sehen, dass ich natürlich das Wort Python am Ende löschen möchte, aber einen Teil davon dort habe am Anfang wurde ebenfalls gelöscht.rrreeeDaher sind
.removeprefix
und.removesuffix
möglicherweise genauer.3. Zoneninfo-Zeitzonenmodul zoneinfo ist ein neu eingeführtes Modul in Python3.9. Zoneinfo kann auf die Zeitzonendatenbank der Internet Assigned Numbers Authority (IANA) zugreifen. IANA aktualisiert ihre Datenbank mehrmals im Jahr und ist die maßgeblichste Quelle für Zeitzoneninformationen. Mit Zoneinfo können Sie ein Objekt abrufen, das jede Zeitzone in der Datenbank beschreibt: rrreee
4 Integrierte Sammlungstypen für Typhinweise
In Typhinweisen können Sie Verwenden Sie jetzt integrierte Sammlungen. Typen (z. B. list und dict) werden als generische Typen verwendet, ohne dass der entsprechende Großbuchstabentyp (z. B. List oder Dict) austyping
importiert werden muss.
graphlib.TopologicalSorter
enthält, um eine Möglichkeit zur topologischen Sortierung bereitzustellen Funktion. 🎜rrreee🎜 6. Kleinstes gemeinsames Vielfaches (LCM) 🎜🎜Python verfügt seit langem über eine Funktion zur Berechnung des größten gemeinsamen Teilers (GCD) zweier Zahlen: 🎜rrreee🎜Das kleinste gemeinsame Vielfache (LCM) hängt mit dem größten gemeinsamen Teiler (GCD) zusammen ), LCM kann gemäß GCD definiert werden: 🎜rrreee🎜In Python 3.9 müssen Sie keine eigene LCM-Funktion mehr definieren, es fügt die Funktion zur Berechnung des kleinsten gemeinsamen Vielfachen hinzu: 🎜rrreee🎜7. Ein leistungsfähigerer Python-Parser 🎜 🎜Das Coolste an Python 3.9 Eine der Funktionen, die den Leuten im täglichen Programmieren nicht auffällt, ist die Aktualisierung des Parsers. Der Parser ist die Grundkomponente des Python-Interpreters. In der neuesten Version wurde der Parser neu erstellt. 🎜🎜Python hat zuvor den LL(1)-Parser verwendet, um Quellcode in einen Analysebaum zu analysieren. Sie können sich einen LL(1)-Parser als einen Parser vorstellen, der jeweils ein Zeichen liest und den Quellcode ohne Zurückverfolgen interpretiert. 🎜🎜Der neue Interpreter basiert auf PEG (Parsing Expression Grammar) und nicht auf LL(1). Die Leistung des neuen Parsers ist mit der des alten Parsers vergleichbar, und PEG ist beim Entwerfen neuer Sprachfunktionen flexibler als LL(1). 🎜🎜Von der gesamten Standardbibliothek ist der PEG-Parser etwas schneller, benötigt aber auch mehr Speicher. Tatsächlich ist es schwer zu sagen, wie gut oder schlecht die Leistung beim Einsatz des neuen Parsers ist. 🎜🎜🎜🎜Verwandte kostenlose Lernempfehlungen: 🎜🎜🎜Python-Tutorial🎜🎜🎜(Video)🎜🎜🎜Das obige ist der detaillierte Inhalt vonEndlich die Einführung von Python 3.9. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!