Nach einem Jahr Entwicklung Wesentliche Veröffentlichung der Programmiersprache . Python 3.9 war die erste Veröffentlichung nach dem Projekt an der Vorbereitung und UnterstĂŒtzung von Releases. Neue wesentliche Veröffentlichungen werden nun jĂ€hrlich erstellt, und Korrekturupdates werden alle zwei Monate herausgegeben. Jede wesentliche Version wird anderthalb Jahre unterstĂŒtzt, danach werden fĂŒr sie ĂŒber einen Zeitraum von dreieinhalb Jahren weiterhin Sicherheitskorrekturen bereitgestellt.
Die Arbeit an der neuen Version beginnt nun fĂŒnf Monate vor der Veröffentlichung der nĂ€chsten Version, d.h. gleichzeitig mit der Veröffentlichung von Python 3.9 Alpha-Tests der Version Python 3.10. Die Version Python 3.10 wird sieben Monate lang in der Alpha-Veröffentlichungsphase sein, wĂ€hrend dieser Zeit werden neue Funktionen hinzugefĂŒgt und Fehler behoben. Danach wird wĂ€hrend der drei Monate Beta-Testphase das HinzufĂŒgen neuer Funktionen verboten, und die gesamte Aufmerksamkeit wird der Fehlerbehebung gewidmet. Die letzten zwei Monate vor der Veröffentlichung wird die Version in der Release-Kandidaten-Phase sein, in der das finale Stabilisieren durchgefĂŒhrt wird.
in Python 3.9:
- In Dictionaries, die mit der eingebauten Klasse dict definiert sind, werden die Merge-Operatoren â|â und Update-Operatoren â|=â unterstĂŒtzt, die die Methoden {**d1, **d2} und dict.update ergĂ€nzen, die zuvor zum ZusammenfĂŒhren von Dictionaries angeboten wurden.
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'} - Die integrierte Sammlung von Typen umfasst list, dict und tuple, die als Basis-Typen ohne Import aus dem Modul typing verwendet werden können. D.h. anstelle von typing.List, typing.Dict und typing.Tuple kann jetzt einfach
list, dict und tuple angegeben werden:def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name) - flexible Mittel zur Annotierung von Funktionen und Variablen bereitgestellt. Um Annotationen anzuhĂ€ngen, wurde im Modul typing der neue Typ Annotated hinzugefĂŒgt, der bestehende Typen mit zusĂ€tzlichen Metadaten erweitert, die bei der statischen Analyse oder fĂŒr Optimierungen zur Laufzeit genutzt werden können. Um auf die Metadaten aus dem Code zuzugreifen, wurde der Methode typing.get_type_hints() ein Parameter include_extras hinzugefĂŒgt.
charType = Annotated[int, ctype("char")]
UnsignedShort = Annotated[int, struct2.ctype('H')] - Die grammatikalischen Anforderungen an Dekoratoren â jeder Ausdruck, der in if- und while-Blöcken verwendet werden kann, kann jetzt als Dekorator verwendet werden. Diese Ănderung hat die Lesbarkeit des PyQt5-Codes erheblich verbessert und die Wartung dieses Moduls vereinfacht:
FrĂŒher:
button_0 = buttons[0]
@button_0.clicked.connectJetzt kann man schreiben:
@buttons[0].clicked.connect - In die Standardbibliothek Modul , einschlieĂlich Informationen aus der IANA-Zeitzonen-Datenbank.
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Sommerzeit
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo('America/Los_Angeles'))
>>> print(dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
'PDT'>>> # Standardzeit
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00>>> print(dt.tzname())
PST - Das Modul graphlib wurde hinzugefĂŒgt, das UnterstĂŒtzung fĂŒr die topologische Sortierung von Graphen bietet.
- neue Methoden zum Entfernen von PrĂ€fixen und Suffixen von Zeichenfolgen vorgeschlagen â str.removeprefix(prefix) und str.removesuffix(suffix). Die Methoden wurden zu den Objekten str, bytes, bytearray und collections.UserString hinzugefĂŒgt.
>>> s = 'FooBar'
>>> s.removeprefix('Foo')
'Bar' - neuer Parser (Parsing Expression Grammar), der den LL(1)-Parser ersetzt hat. die Möglichkeit fĂŒr C-Erweiterungsmethoden, auf den Zustand der Module, in denen sie definiert sind, ĂŒber direktes Dereferenzieren von Zeigern zuzugreifen, anstatt den Zustand des Moduls mithilfe der Funktion PyState_FindModule zu suchen. Diese Ănderung ermöglicht eine Leistungssteigerung der C-Module durch Verringerung oder vollstĂ€ndige Beseitigung der Overheadkosten fĂŒr die ĂberprĂŒfung des Modulzustands. Um ein Modul mit einer Klasse zu verknĂŒpfen, wurde die C-Funktion PyType_FromModuleAndSpec() vorgeschlagen, um das Modul und seinen Zustand zu erhalten, die C-Funktionen PyType_GetModule() und PyType_GetModuleState(), und um einer Methode den Zugriff auf die Klasse, in der sie definiert ist, zu ermöglichen, die C-Funktion PyCMethod und das Flag METH_METHOD.
- Der Garbage Collector
- Garbage Collector von der Sperrung von Sammlungen, die wiederbelebte Objekte enthalten, die nach dem Start des Finalisierers von auĂen zugĂ€nglich bleiben.
- Eine Methode wurde hinzugefĂŒgt, , der es ermöglicht, die Linux-Kernel-Subsystem "pidfd" zur Behandlung von Situationen der PID-Wiederverwendung zu nutzen (pidfd ist mit einem bestimmten Prozess verbunden und Ă€ndert sich nicht, wĂ€hrend die PID nach Abschluss des aktuellen Prozesses an einen anderen Prozess gebunden werden kann, der mit dieser PID verbunden ist).
- Die UnterstĂŒtzung der Unicode-Spezifikation wurde auf Version 13.0.0 aktualisiert.
- Beseitigt bei der erneuten Initialisierung des Python-Interpreters in einem Prozess.
- Die Leistung der eingebauten Typen range, tuple, set, frozenset, list und dict wurde optimiert, durch die Anwendung des Vectorcall-Protokolls fĂŒr einen schnelleren Zugriff auf in C geschriebene Objekte.
- Die Module _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time und _weakref wurden zur initialen Ladezeit mit .
- Die Module der Standardbibliothek audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios und zlib wurden so umgestellt, dass sie ein begrenztes , das die Problematik der FunktionalitĂ€t von Erweiterungsmodulen fĂŒr verschiedene Python-Versionen löst (bei einem Versionsupdate sind keine neuen Compilierungen von Erweiterungsmodulen erforderlich, und fĂŒr 3.9 gebaute Module können in der Version 3.10 verwendet werden).
- Im asyncio-Modul wurde die UnterstĂŒtzung der Option reuse_address aufgrund potenzieller Sicherheitsprobleme eingestellt (die Verwendung von SO_REUSEADDR fĂŒr UDP in Linux ermöglicht es verschiedenen Prozessen, hörende Sockets an einen UDP-Port anzuhĂ€ngen).
- Es wurden neue Optimierungen hinzugefĂŒgt, zum Beispiel die Leistung von Signalhandlern in Multithread-Anwendungen wurde verbessert, die Geschwindigkeit des subprocess-Moduls in der FreeBSD-Umgebung erhöht und die Zuweisung von Zeitvariablen beschleunigt (die Zuordnung einer Variablen im Ausdruck âfor y in [expr]â ist jetzt nicht langsamer als der Ausdruck ây = exprâ). Insgesamt ist die Mehrheit der Tests geringerer Performance im Vergleich zum Branch 3.8 (Verbesserungen sind nur in den Tests write_local und write_deque zu beobachten):
Python-Version 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âZugriff auf Variablen und Attribute:
read_local 7.1 7.1 5.4 5.1 3.9 4.0
read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
read_global 15.5 19.0 14.3 13.6 7.6 7.7
read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9Zugriff auf Variablen und Attribute:
write_local 8.7 9.3 5.5 5.3 4.3 4.2
write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
write_global 19.7 21.2 18.0 18.0 15.8 17.2
write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7Zugriff auf Datenstrukturen:
read_list 24.2 24.5 20.8 20.8 19.0 21.1
read_deque 24.7 25.5 20.2 20.6 19.8 21.6
read_dict 24.3 25.7 22.3 23.0 21.0 22.5
read_strdict 22.6 24.3 19.5 21.2 18.9 21.6Zugriff zum Schreiben in Datenstrukturen:
write_list 27.1 28.5 22.5 21.6 20.0 21.6
write_deque 28.7 30.1 22.7 21.8 23.5 23.2
write_dict 31.4 33.3 29.3 29.2 24.7 27.8
write_strdict 28.4 29.9 27.5 25.2 23.1 29.8Stapel- (oder Warteschlangen-) Operationen:
list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5Zeitmessung des Schleifen:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - viele Funktionen und Methoden von Python 2.7, die zuvor als veraltet gekennzeichnet waren und in der letzten Ausgabe zu einer DeprecationWarning fĂŒhrten, einschlieĂlich der Methode unescape() in html.parser.HTMLParser,
tostring() und fromstring() in array.array, isAlive() in threading.Thread, getchildren() und getiterator() in ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() und base64.decodestring().
Quelle: opennet.ru
