Optionale Verkettung in Python

Migel Hewage Nimesha 21 Juni 2023
  1. Verwenden Sie try-except, um optionale Verkettung in Python zu implementieren
  2. Verwenden Sie getattr, um optionale Verkettung in Python zu implementieren
  3. Verwenden Sie get(key, value), um die optionale Verkettung in Python zu implementieren
  4. Verwenden Sie eine Kombination von Methoden, um optionale Verkettung in Python zu implementieren
  5. Verwenden Sie getattr als Drop-In, um optionales Verketten in Python zu implementieren
  6. Verwenden Sie glom, um optionale Verkettung in Python zu implementieren
  7. Verwenden Sie eine lesbare Methode mit Wörterbüchern und Objekten, um optionale Verkettungen in Python zu implementieren
  8. Abschluss
Optionale Verkettung in Python

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.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.