---
---25. Juni 2020 14:34

Was ist neu in Python 3.9

Inhaltsverzeichnis

Es befindet sich derzeit in der Beta-Phase (3.9.0b3) und in Zukunft werden wir eine vollständige Version von Python 3.9 sehen. Einige der neuen Funktionen sind einfach unglaublich cool und es wird großartig sein, sie in einer vollständigen Version zu sehen.


Folgende Punkte werden wir behandeln:

  • Verkettungsoperator für Wörterbücher
  • Tippen
  • Zwei neue String-Methoden
  • Neuer Parser

Schauen wir uns diese Innovationen an und wie sie angewendet werden können.

Wörterbücher kombinieren

Eine meiner Lieblingsfunktionen mit guter Syntax. Wenn wir zum Beispiel zwei Wörterbücher a und b haben, die kombiniert werden müssen, können wir jetzt einen speziellen Operator verwenden.

a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}

c = a | b
print(c) # {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

Sowie der Aktualisierungsoperator |= zum Aktualisieren eines vorhandenen Wörterbuchs:

a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}

a |= b

print(a) # {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

Wenn zwei verschiedene Wörterbücher denselben Schlüssel haben, verwenden Sie | :

a = {1: 'a', 2: 'b', 3: 'c', 6: 'одинаковые ключи'}
b = {4: 'd', 5: 'e', 6: 'но разные значения'}

print(a | b) # {1: 'a', 2: 'b', 3: 'c', 6: 'но разные значения', 4: 'd', 5: 'e'}

Aktualisieren von Wörterbüchern mit Generatoren

Eine weitere interessante Sache am Operator |= ist die Möglichkeit, Wörterbücher mit Generatoren zu aktualisieren, die ein Schlüssel-Wert- Paar haben:

a = {'a': 'one', 'b': 'two'}
b = ((i, i**2) for i in range(3))

a |= b

print(a) # {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}

Beim Versuch, eine solche Aktion mit der | Wir erhalten einen TypeError, da der Operator nur die Vereinigung mit dict -Objekten zulässt

Ошибка TypeError

Tippen

Python ist eine dynamisch typisierte Sprache, was bedeutet, dass wir den Typ einer Variablen nicht angeben müssen. Dieses Verhalten ist normal, obwohl es manchmal verwirrend sein kann. Und dann wird Pythons Flexibilität plötzlich zu nichts weiter als einer Unannehmlichkeit.

Seit Version 3.5 können wir Typen für Variablen angeben, aber dieser Ansatz war etwas umständlich. Das Update ändert alles, sehen Sie sich das Beispiel an:

3.9 Eingabebeispiel Keine Eingabe (links) mit 3.9 Eingabe (rechts)

In der Funktion add_int wollen wir explizit Zahlen addieren (aus irgendeinem kryptischen und unerklärlichen Grund). Aber unser Redakteur weiß das nicht, und es ist ganz normal, zwei Zeilen mit dem + -Operator hinzuzufügen - daher sehen wir keine Kommentare vom Interpreter.

Jetzt können wir den int -Typ angeben, den wir in der Eingabe der Funktion erwarten möchten. Und jetzt meldet der Interpreter den Fehler sofort.

Wir können auch verschachtelte Typen angeben, zum Beispiel:

Beispiel für die Verwendung verschachtelter Typen

Tippen lässt sich überall anwenden – und das alles dank der neuen Syntax sieht es jetzt viel schöner aus.

Beispiel für die Verwendung verschachtelter Typen

Zwei neue String-Methoden

Nicht so wichtig wie die anderen oben genannten Neuerungen, aber dennoch in bestimmten Situationen nützlich. Zwei neue String-Methoden zum Entfernen von Präfix und Suffix:

"Hello world".removeprefix("He") # "llo world"

"Hello world".removesuffix("ld") # "Hello wor"

Neuer Parser

Obwohl diese Änderung nicht übersehen werden kann, könnte sie später eine der bedeutendsten zukünftigen Entwicklungen von Python werden.

Python verwendet derzeit hauptsächlich den LL(1)-Parser, der Code von oben nach unten und von links nach rechts liest.

Im Moment verstehe ich nicht wirklich, wie das funktioniert - aber ich kann Ihnen eine Liste mit einigen Problemen mit dieser Methode geben:

  • Python enthält nicht nur den LL(1)-Parser, aus diesem Grund arbeiten einige Parser unter Umgehung des bestehenden Systems, was zu gewissen Schwierigkeiten führt.

  • LL(1) erzeugt eine Beschränkung der Python-Syntax (ohne Möglichkeit, sie zu umgehen). Dieses Problem hebt hervor, dass der folgende Code nicht ausgeführt werden kann
    aktueller Parser (ausgelöst durch SyntaxError):

with (open("a_really_long_foo") as foo,
      open("a_really_long_bar") as bar):
    pass
  • LL(1) unterbricht den linken rekursiven Parser. So kann eine bestimmte rekursive Syntax eine Endlosschleife mit einer Baumstruktur provozieren. Guido van Rossum, Schöpfer von Python, erklärt es hier

All diese Faktoren (wie auch andere, die ich einfach nicht beschreiben kann) haben einen zukunftsweisenden Einfluss auf Python; sie stoppen die Entwicklung der Sprache.

Ein neuer Parser, der auf der PEG -Technologie basiert, gibt Entwicklern mehr Flexibilität beim Schreiben von Code – etwas, das wir ab Version 3.10 bemerken werden.

Fazit

Das ist alles, was wir von der neuen Version 3.9 erwarten können. Wenn Sie es kaum erwarten können, die neue Beta-Version - 3.9.0b3 - auszuprobieren, können Sie sie hier installieren.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 14:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 18:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr9. Februar 2024 02:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 18:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 10:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 22:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 16:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 11:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken