Optionale Verkettung in Python
-
Verwenden Sie
try-except
, um optionale Verkettung in Python zu implementieren -
Verwenden Sie
getattr
, um optionale Verkettung in Python zu implementieren -
Verwenden Sie
get(key, value)
, um die optionale Verkettung in Python zu implementieren - Verwenden Sie eine Kombination von Methoden, um optionale Verkettung in Python zu implementieren
-
Verwenden Sie
getattr
als Drop-In, um optionales Verketten in Python zu implementieren -
Verwenden Sie
glom
, um optionale Verkettung in Python zu implementieren - Verwenden Sie eine lesbare Methode mit Wörterbüchern und Objekten, um optionale Verkettungen in Python zu implementieren
- Abschluss
Python ist eine Programmiersprache, die hauptsächlich in der Systemskripterstellung, der serverseitigen Webentwicklung und der Softwareentwicklung verwendet wird. Außerdem besteht es aus einfachen Syntaxen, die die Lesbarkeit des Codes verbessern.
Unter den Funktionen in Python ist die optionale Verkettung eine sichere und präzise Möglichkeit, auf Eigenschaften von verschachtelten Objekten zuzugreifen. Es ist der Prozess des Aufrufens und Abfragens der Eigenschaften, die zu diesem Zeitpunkt null oder nicht null sein können.
Durch die Verwendung von optionaler Verkettung können wir intern prüfen, ob eine Eigenschaft in einem Objekt verfügbar ist, anstatt manuell zu prüfen.
Die optionale Verkettung prüft, ob die dem Operator überlassene Eigenschaft definiert oder undefiniert ist. Wenn die Eigenschaft nicht null
ist, ist der Aufruf erfolgreich und gibt undefiniert zurück, wenn sie ungültig oder undefiniert ist.
Hier gibt es einen undefinierten Wert zurück, anstatt einen Fehler zu melden. Dies funktioniert auch gut mit den Funktionsaufrufen, obwohl die Methode möglicherweise nicht vorhanden ist.
Dieses Konzept wurde kürzlich von ECMA International, Technical Committee 39 – ECMAScript, verfasst von Claude Pache, Gabriel Isenberg, Daniel Rosenwasser und Dustin Savery, vorgestellt.
Beim Schreiben von sauberem Code ist die optionale Verkettung eine nette Funktion.
Im Folgenden sind einige Methoden aufgeführt, die wir bei der Implementierung optionaler Verkettungen in Python verwenden können. Wir können diese Codeabschnitte beim Erstellen der Funktionen verwenden.
Verwenden Sie try-except
, um optionale Verkettung in Python zu implementieren
Die pythonischste Art der optionalen Verkettung ist unten.
try:
# statements
except (NameError, AttributeError) as e:
# statements (else)
Diese Methode verwendet den try
-Befehl und den außer
-Befehl. Innerhalb von try
enthält es die Anweisungen, die zur Steuerung des Flusses verwendet werden, während außer
aus Anweisungen besteht, die zur Behandlung von Fehlern verwendet werden, die bei der Übergabe der Anweisungen an das Programm auftreten.
Wenn ein Programm ausgeführt wird, können Ausnahmen auftreten. Dann unterbrechen sie das Programm, indem sie eine Meldung ausdrucken, die den Fehler und seine Entstehung anzeigt.
Um Unterbrechungen zu vermeiden, müssen wir sie einfangen. Die Behandlung von Ausnahmen wie dieser hilft also dabei, fehlersicheren Code zu erhalten.
Hier betrachten wir zwei Hauptfehler: NameError
und AttributeError
. Wenn wir eine undefinierte Variable oder eine Funktion verwenden, kann NameError
auftreten.
Wenn der Benutzer versucht, eine ungültige Attributreferenz zu erstellen, schlägt die Referenz fehl und es kann zu einem AttributeError
kommen. Auch Rechtschreibabweichungen werden als AttributeError
ausgegeben.
Wie oben besprochen, hilft dieser pythonische Ansatz der optionalen Verkettung beim Aufrufen der Eigenschaften, selbst wenn sie definiert sind oder nicht, während die Ausnahmen behandelt werden.
Verwenden Sie getattr
, um optionale Verkettung in Python zu implementieren
Anstelle der obigen Methode ist auch die Verwendung von getattr
eine weitere Methode der optionalen Verkettung.
getattr(getattr(foo, "bar", None), "baz", None)
Hier verwenden wir die Funktion getattr
, die den Wert des benannten Attributs aus dem angegebenen Objekt zurückgibt. Der Objektname sollte eine Zeichenfolge sein, und wenn es sich um ein benanntes Attribut handelt, wird der Wert dieses Attributs zurückgegeben.
Existiert das benannte Attribut jedoch nicht, wird der Standardwert zurückgegeben oder wirft einen AttributeError
.
Innerhalb dieser getattr
-Funktion ist getattr(foo, 'bar', None)
das Objekt, während baz
das Attribut und None
der Standardwert ist.
Verwenden Sie get(key, value)
, um die optionale Verkettung in Python zu implementieren
Wir können get(key, value)
verwenden, wenn es sich um ein Wörterbuch handelt.
{"foo": {"bar": "baz"}}.get("foo", {}).get("bar")
Das Wörterbuch ist eine Sammlung geordneter, veränderbarer und nicht duplizierter Datenwerte, die als Schlüssel:Wert
-Paare gespeichert werden. Hier sind 'foo'
, 'bar'
und 'baz'
die Platzhalter, die wir in Python verwenden.
{'foo': {'bar': 'baz'}}
ist das Wörterbuch, und damit verwenden wir zwei get
-Funktionen mit einem key
und einem value
. Hier gibt die get
-Funktion den Wert des Items mit dem angegebenen Schlüssel zurück.
Die erste get
-Funktion besteht aus einem Schlüssel als 'foo'
und einem Wert von {}
, während die zweite nur aus einem Schlüssel als 'bar'
besteht.
Wie im obigen Code-Snippet können wir das optionale Verkettungskonzept auch dann anpassen, wenn wir ein Wörterbuch verwenden.
Verwenden Sie eine Kombination von Methoden, um optionale Verkettung in Python zu implementieren
Unten ist eine weitere Methode, der wir bei der optionalen Verkettung folgen können. Es ist eine Kombination von Methoden.
from functools import reduce
def optional_chain(obj, keys):
try:
reduce(getattr, keys.split("."), root)
except AttributeError:
return None
optional_chain(foo, "bar.baz")
Zuerst müssen wir das Modul reduce
aus den functools
importieren, die das Zwischenergebnis speichern und nur die endgültige Summe zurückgeben. Dann wird die Funktion optional_chain
mit zwei Parametern definiert.
Danach können wir die zuerst besprochene Methode mit try
und den except
-Controls anpassen. Innerhalb der Befehle try
und except
haben wir die Funktion getattr
verwendet.
Die Funktionsweise von getattr
haben wir in der zweiten Methode beschrieben. Schließlich rufen wir die optional_chain
auf, indem wir zwei Parameter definieren.
Verwenden Sie getattr
als Drop-In, um optionales Verketten in Python zu implementieren
Wir können es als Drop-In verwenden, ohne das getattr
wie oben zu erweitern.
from functools import reduce
def rgetattr(obj, attr, *args):
def _getattr(obj, attr):
return getattr(obj, attr, *args)
return reduce(_getattr, attr.split("."), obj)
Nach dem Import des Moduls haben wir eine Funktion namens rgetattr
mit drei Parametern definiert. Dann definieren wir die Funktion getattr
als Drop-In.
Wenn der Pfad nicht existiert, wirft rgetattr
einen AttributeError
, und wir können default statt None
angeben.
Verwenden Sie glom
, um optionale Verkettung in Python zu implementieren
Eine andere Methode, die wir beim optionalen Verketten verwenden können, ist die Verwendung von glom
.
from glom import glom
target = {"a": {"b": {"c": "d"}}}
glom(target, "a.b.c", default=None)
Als ersten Schritt sollten wir das Modul glom
aus der Bibliothek importieren. Dann wurde das Ziel in Form eines Wörterbuchs mit a, b,
und c
definiert. Außerdem ist d
der entsprechende Wert von c
.
Danach hat die Funktion glom
mit target
und a.b.c
darin aufgerufen. Wenn eine Ausnahme auftritt, wird None
als Standardwert ausgegeben.
Verwenden Sie eine lesbare Methode mit Wörterbüchern und Objekten, um optionale Verkettungen in Python zu implementieren
Durch die Anpassung an die folgende Methode können wir den Code lesbarer machen, wenn er mit Wörterbüchern und Objekten verwendet wird.
def optional_chain(root, *keys):
result = root
for k in keys:
if isinstance(result, dict):
result = result.get(k, None)
else:
result = getattr(result, k, None)
if result is None:
break
return result
Zuerst definierte es eine Funktion namens optional_chain
und fuhr mit einer for
-Schleife und if-else
-Anweisungen fort. Es verwendete die getattr
-Funktion innerhalb des Flows, um das Ergebnis im else
-Teil zu erhalten.
Wir müssen keys
nach dem ersten Argument hinzufügen, wenn wir diese Funktion verwenden.
obj = {"a": {"b": {"c": {"d": 1}}}}
print(optional_chain(obj, "a", "b"), optional_chain(obj, "a", "z"))
Abschluss
Insgesamt sind die oben genannten Methoden die Möglichkeiten, wie wir uns anpassen können, wenn wir eine optionale Verkettung in Python benötigen.
Wir können die Versuch
- und Ausnahme
-Ansätze verwenden und vorzeitige Optimierungen vermeiden, wenn wir das von uns gelöste Prozess- und Leistungsproblem kennen. Außerdem können wir den Code mit getattr
widerspiegeln.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.