Bild vom Autor | Erstellt mit Snappify
Wenn Sie in Python Variablen innerhalb eines Ausdrucks Werte zuweisen möchten, können Sie den Walross-Operator := verwenden. Während x = 5
ist eine einfache Variablenzuweisung, x := 5
ist, wie Sie den Walross-Operator verwenden.
Dieser Operator wurde in Python 3.8 eingeführt und kann Ihnen helfen, prägnanteren und (in manchen Fällen) besser lesbaren Code zu schreiben. Allerdings kann die unnötige oder häufigere Verwendung des Operators dazu führen, dass der Code schwerer verständlich wird.
In diesem Tutorial werden wir anhand einfacher Codebeispiele sowohl die effektiven als auch die weniger effektiven Einsatzmöglichkeiten des Walross-Operators erkunden. Legen wir los!
Wie und wann der Walrus-Operator von Python hilfreich ist
Sehen wir uns zunächst Beispiele an, bei denen der Walross-Operator Ihren Code verbessern kann.
1. Prägnantere Loops
Es ist recht üblich, Schleifenkonstrukte zu haben, bei denen Sie eine Eingabe einlesen, die innerhalb der Schleife verarbeitet werden soll, und die Schleifenbedingung von der Eingabe abhängt. In solchen Fällen hilft Ihnen die Verwendung des Walross-Operators, Ihre Schleifen übersichtlicher zu halten.
Ohne Walross-Operator
Betrachten Sie das folgende Beispiel:
knowledge = enter("Enter your knowledge: ")
whereas len(knowledge) > 0:
print("You entered:", knowledge)
knowledge = enter("Enter your knowledge: ")
Wenn Sie den obigen Code ausführen, werden Sie wiederholt aufgefordert, einen Wert einzugeben, solange Sie eine nicht leere Zeichenfolge eingeben.
Beachten Sie, dass es Redundanz gibt. Sie lesen zunächst die Eingabe in die knowledge
Variable. Innerhalb der Schleife drucken Sie den eingegebenen Wert aus und fordern den Benutzer erneut zur Eingabe auf. Die Schleifenbedingung prüft, ob die Zeichenfolge nicht leer ist.
Mit Walrus Operator
Sie können die Redundanz entfernen und die obige Model mit dem Walross-Operator neu schreiben. Dazu können Sie die Eingabe einlesen und prüfen, ob es sich um eine nicht leere Zeichenfolge handelt – alles innerhalb der Schleifenbedingung – indem Sie den Walross-Operator wie folgt verwenden:
whereas (knowledge := enter("Enter your knowledge: ")) != "":
print("You entered:", knowledge)
Dies ist nun prägnanter als die erste Model.
2. Besseres Listenverständnis
Manchmal werden Sie Funktionsaufrufe innerhalb von Listenverständnissen haben. Dies kann ineffizient sein, wenn es mehrere aufwändige Funktionsaufrufe gibt. In diesen Fällen kann das Umschreiben mit dem Walross-Operator hilfreich sein.
Ohne Walross-Operator
Nehmen Sie das folgende Beispiel, bei dem es im Listenableitungsausdruck zwei Aufrufe der Funktion „compute_profit“ gibt:
- Um die neue Liste mit dem Gewinnwert zu füllen und
- Um zu prüfen, ob der Gewinnwert über einem bestimmten Schwellenwert liegt.
# Operate to compute revenue
def compute_profit(gross sales, value):
return gross sales - value
# With out Walrus Operator
sales_data = ((100, 70), (200, 150), (150, 100), (300, 200))
earnings = (compute_profit(gross sales, value) for gross sales, value in sales_data if compute_profit(gross sales, value) > 50)
Mit Walrus Operator
Sie können die Rückgabewerte des Funktionsaufrufs der Variable „Revenue“ zuweisen und diese zum Auffüllen der Liste wie folgt verwenden:
# Operate to compute revenue
def compute_profit(gross sales, value):
return gross sales - value
# With Walrus Operator
sales_data = ((100, 70), (200, 150), (150, 100), (300, 200))
earnings = (revenue for gross sales, value in sales_data if (revenue := compute_profit(gross sales, value)) > 50)
Diese Model ist besser, wenn die Filterbedingung einen aufwändigen Funktionsaufruf beinhaltet.
So verwenden Sie den Walross-Operator von Python nicht
Nachdem wir nun einige Beispiele gesehen haben, wie und wann Sie den Walross-Operator von Python verwenden können, sehen wir uns einige Anti-Patterns an.
1. Komplexe Listenverständnisse
Wir haben den Walross-Operator in einem vorherigen Beispiel innerhalb einer Listenableitung verwendet, um wiederholte Funktionsaufrufe zu vermeiden. Aber die übermäßige Verwendung des Walross-Operators kann genauso schädlich sein.
Die folgende Listenableitung ist aufgrund mehrerer verschachtelter Bedingungen und Zuweisungen schwer zu lesen.
# Operate to compute revenue
def compute_profit(gross sales, value):
return gross sales - value
# Messy listing comprehension with nested walrus operator
sales_data = ((100, 70), (200, 150), (150, 100), (300, 200))
outcomes = (
(gross sales, value, revenue, sales_ratio)
for gross sales, value in sales_data
if (revenue := compute_profit(gross sales, value)) > 50
if (sales_ratio := gross sales / value) > 1.5
if (profit_margin := (revenue / gross sales)) > 0.2
)
Als Übung können Sie versuchen, die Logik in einzelne Schritte aufzuteilen – innerhalb einer regulären Schleife und von if-Bedingungsanweisungen. Dadurch wird der Code viel einfacher zu lesen und zu warten.
2. Verschachtelte Walross-Operatoren
Die Verwendung verschachtelter Walrossoperatoren kann zu Code führen, der schwer zu lesen und zu warten ist. Dies ist insbesondere dann problematisch, wenn die Logik mehrere Zuweisungen und Bedingungen innerhalb eines einzelnen Ausdrucks umfasst.
# Instance of nested walrus operators
values = (5, 15, 25, 35, 45)
threshold = 20
outcomes = ()
for worth in values:
if (above_threshold := worth > threshold) and (incremented := (new_value := worth + 10) > 30):
outcomes.append(new_value)
print(outcomes)
In diesem Beispiel erschweren die verschachtelten Walrossoperatoren das Verständnis. Der Leser muss mehrere Logikebenen in einer einzigen Zeile entpacken, was die Lesbarkeit verringert.
Einpacken
In diesem kurzen Tutorial haben wir besprochen, wie und wann der Walross-Operator von Python verwendet werden sollte und wann nicht. Die Codebeispiele finden Sie auf GitHub.
Wenn Sie wissen möchten, welche Fallstricke es beim Programmieren mit Python zu vermeiden gilt, lesen Sie 5 häufige Python-Fallstricke und wie man sie vermeidet.
Machen Sie weiter mit dem Programmieren!
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Neighborhood zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.