Viele Programmierer begannen, von der zweiten Version von Python auf die dritte zu wechseln, da die Unterstützung für Python 2 bald
eingestellt wird . Der Autor des Artikels, dessen Übersetzung wir veröffentlichen, stellt fest, dass der Großteil des Python 3-Codes, den er gesehen hat, wie ein Code mit Klammern aussieht, der in Python 2 geschrieben ist. Ihm zufolge sündigt er selbst so
etwas . Hier gibt er Beispiele für einige der großartigen Funktionen, die nur für Benutzer von Python 3 verfügbar sind. Er hofft, dass diese Funktionen denjenigen das Leben erleichtern, die etwas über sie lernen.

Alle Beispiele in diesem Artikel wurden mit Python 3.7 geschrieben. Die Beschreibung der einzelnen Funktionen enthält Informationen zur Mindestversion von Python, die für die Verwendung erforderlich ist.
Format Strings (3.6+)
Ohne Zeichenfolgen ist es schwierig, in einer Programmiersprache etwas Nützliches zu schreiben. Für eine effektive Arbeit mit Zeichenfolgen benötigt ein Entwickler jedoch praktische Tools. Solche Tools, mit denen Sie mit komplexen Strukturen arbeiten können, ohne den Seelenfrieden zu verlieren. Die meisten Python-Entwickler verwenden die
format
:
user = "Jane Doe" action = "buy" log_message = 'User {} has logged in and did an action {}.'.format( user, action ) print(log_message)
Python 3 unterstützt zusammen mit der
format
Formatzeichenfolgen (
F-Zeichenfolgen , F-Zeichenfolgen). Sie sind ein flexibles Werkzeug zur Durchführung verschiedener String-Manipulationen. So sieht das vorherige Beispiel aus, das mithilfe von Formatzeichenfolgen neu geschrieben wurde:
user = "Jane Doe" action = "buy" log_message = f'User {user} has logged in and did an action {action}.' print(log_message)
Pathlib-Modul (3.4+)
Formatzeichenfolgen sind eine großartige Technologie, aber es wurden spezielle Tools entwickelt, um mit einigen Zeilen zu arbeiten, z. B. Dateipfade, die die Bearbeitung erheblich vereinfachen. Python 3 verfügt über ein
Pathlib- Modul, eine praktische Abstraktion für die Arbeit mit Dateipfaden. Wenn Sie sich noch nicht sicher sind, ob dieses Modul zur Lösung Ihrer Probleme nützlich ist, schauen Sie sich
dieses Material an.
from pathlib import Path root = Path('post_sub_folder') print(root)
Typ Anmerkungen (3.5+)
Was ist besser - statische oder dynamische Eingabe? Vielleicht hat fast jeder Programmierer seine eigene Antwort auf diese schwierige Frage. Ich überlasse es dem Leser, wie genau sie ihre Programme typisieren. Aber ich denke, es ist gut für alle, zumindest zu wissen, dass Python 3 Typanmerkungen unterstützt.
def sentence_has_animal(sentence: str) -> bool: return "animal" in sentence sentence_has_animal("Donald had a farm without animals")
Transfers (3.4+)
Python 3 unterstützt dank der
Enum
Klasse einen einfachen Mechanismus zum Arbeiten mit
Aufzählungen . Aufzählungen eignen sich zum Speichern von Konstantenlisten. Andernfalls werden Konstanten zufällig im Code verteilt.
from enum import Enum, auto class Monster(Enum): ZOMBIE = auto() WARRIOR = auto() BEAR = auto() print(Monster.ZOMBIE)
In der Python 3-
Dokumentation können Sie feststellen, dass eine Aufzählung eine Sammlung symbolischer Namen (Mitglieder) ist, die an eindeutige, unveränderliche Werte gebunden sind. Mitglieder einer einzelnen Liste können auf Identität verglichen werden. Aufzählungen können umgangen werden.
for monster in Monster: print(monster)
Eingebauter LRU-Cache (3.2+)
Heutzutage werden Caching-Mechanismen in fast allen Software- und Hardwaresystemen verwendet. Python 3 vereinfacht das Caching mit dem
lru_cache- Dekorator
erheblich , der den LRU-Caching-Algorithmus implementiert (am
wenigsten verwendet ).
Unten finden Sie eine Funktion, die die Fibonacci-Zahlen berechnet. Diese Funktion wird häufig gezwungen, bei rekursiven Aufrufen dieselben Vorgänge auszuführen. Infolgedessen stellt sich heraus, dass die Leistung durch Zwischenspeichern verbessert werden kann.
import time def fib(number: int) -> int: if number == 0: return 0 if number == 1: return 1 return fib(number-1) + fib(number-2) start = time.time() fib(40) print(f'Duration: {time.time() - start}s')
Jetzt verwenden wir
lru_cache
, um diese Funktion zu optimieren (diese Optimierungstechnik wird als
Memoisierung bezeichnet ). Infolgedessen wird die Ausführungszeit einer Funktion, die zuvor in Sekunden gemessen wurde, jetzt in Nanosekunden gemessen.
from functools import lru_cache @lru_cache(maxsize=512) def fib_memoization(number: int) -> int: if number == 0: return 0 if number == 1: return 1 return fib_memoization(number-1) + fib_memoization(number-2) start = time.time() fib_memoization(40) print(f'Duration: {time.time() - start}s')
Iterable Objekte entpacken (3.0+)
Beim
Entpacken iterierbarer Objekte können Sie Variablen verwenden, deren Namen mit einem Sternchen versehen sind. Alles, was nicht in andere Variablen passt, gelangt in solche Variablen. Im folgenden Beispiel fallen der erste und der letzte Wert aus der Liste, die durch den Befehl
range(5)
gebildet wurden, in die Variablen
head
und
tail
. Alles, was zwischen dem ersten und dem letzten Wert liegt, wird in die
body
Variable aufgenommen.
head, *body, tail = range(5) print(head, body, tail)
Datenklassen (3.7+)
Python 3 führte
Datenklassen ein . Sie geben dem Programmierer viel Handlungsfreiheit. Sie können verwendet werden, um die Menge des Boilerplate-Codes zu reduzieren. Tatsache ist, dass der
dataclass
automatisch spezielle Methoden generiert, z. B.
__init__()
und
__repr__()
. Im offiziellen Text des entsprechenden
Vorschlags werden sie als "veränderbare benannte Tupel mit Standardwerten" beschrieben. Hier ist ein Beispiel für das Erstellen einer Klasse ohne Verwendung des
dataclass
:
class Armor: def __init__(self, armor: float, description: str, level: int = 1): self.armor = armor self.level = level self.description = description def power(self) -> float: return self.armor * self.level armor = Armor(5.2, "Common armor.", 2) armor.power()
Hier ist das gleiche, aber bereits mit
dataclass
:
from dataclasses import dataclass @dataclass class Armor: armor: float description: str level: int = 1 def power(self) -> float: return self.armor * self.level armor = Armor(5.2, "Common armor.", 2) armor.power()
Unterstützung für Paketordner ohne __init__.py-Datei (3.3+)
Eine Möglichkeit, Python-Code zu strukturieren, besteht darin,
Pakete zu verwenden (Pakete werden in Ordnern abgelegt, die die Datei
__init__.py
enthalten). Hier ist ein Beispiel aus der offiziellen Dokumentation:
sound/ __init__.py sound formats/ __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ __init__.py echo.py surround.py reverse.py ... filters/ __init__.py equalizer.py vocoder.py karaoke.py ...
Bei Verwendung von Python 2 sollte jeder der im Beispiel genannten Ordner eine
__init__.py
.
__init__.py
Datei enthalten. Dank dieser Datei wird der Ordner als Python-Paket wahrgenommen. In Python 3 werden mit dem Aufkommen der Funktion "
Implizite Namespace-Pakete" solche Ordner nicht mehr benötigt.
sound/ __init__.py sound formats/ wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ echo.py surround.py reverse.py ... filters/ equalizer.py vocoder.py karaoke.py ...
Es sollte beachtet werden, dass in der Tat nicht alles so einfach ist. Gemäß
dieser offiziellen Spezifikation wird die Datei
__init__.py
für reguläre Pakete weiterhin benötigt. Wenn Sie es aus dem Ordner entfernen, wird das Paket zu einem sogenannten
Namespace-Paket , für das zusätzliche Einschränkungen gelten.
Zusammenfassung
In diesem Artikel werden nicht alle interessanten Funktionen von Python 3 behandelt. Wir hoffen jedoch, dass Sie hier etwas Nützliches finden. Beispielcode finden Sie in
diesem Repository.
Liebe Leser! Welche Funktionen von Python 3 würden Sie hier zur Liste hinzufügen?
