Was bedeutet die :=
Operanden bedeuten, genauer gesagt für Python?
Kann jemand erklären, wie man diesen Codeschnipsel liest?
node := root, cost = 0
frontier := priority queue containing node only
explored := empty set
Julio
Was bedeutet die :=
Operanden bedeuten, genauer gesagt für Python?
Kann jemand erklären, wie man diesen Codeschnipsel liest?
node := root, cost = 0
frontier := priority queue containing node only
explored := empty set
Mike McMahon
Im Zusammenhang mit der Frage haben wir es mit Pseudocode zu tun, aber ab Python 3.8, :=
ist eigentlich ein gültiger Operator, der die Zuweisung von Variablen innerhalb von Ausdrücken ermöglicht:
# Handle a matched regex
if (match := pattern.search(data)) is not None:
# Do something with match
# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
process(chunk)
# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]
# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]
Sehen PEP 572 für mehr Details.
Was Sie gefunden haben, ist Pseudocode
Pseudocode ist eine informelle allgemeine Beschreibung des Funktionsprinzips eines Computerprogramms oder eines anderen Algorithmus.
:=
ist eigentlich der Zuweisungsoperator. In Python ist das einfach =
.
Um diesen Pseudocode in Python zu übersetzen, müssten Sie die referenzierten Datenstrukturen und etwas mehr über die Algorithmusimplementierung kennen.
Einige Anmerkungen zu Pseudocode:
:=
ist der Zuweisungsoperator oder =
in Python=
ist der Gleichheitsoperator oder ==
in Python procedure fizzbuzz
For i := 1 to 100 do
set print_number to true;
If i is divisible by 3 then
print "Fizz";
set print_number to false;
If i is divisible by 5 then
print "Buzz";
set print_number to false;
If print_number, print i;
print a newline;
end
void function fizzbuzz
For (i = 1; i <= 100; i++) {
set print_number to true;
If i is divisible by 3
print "Fizz";
set print_number to false;
If i is divisible by 5
print "Buzz";
set print_number to false;
If print_number, print i;
print a newline;
}
Beachten Sie die Unterschiede in der Verwendung von geschweiften Klammern und dem Zuweisungsoperator.
planen sie, auch Anmerkungen hinzuzufügen? wie ich: int = 1 bis 100 tun
– Pippo1980
5. Dezember 2022 um 15:08 Uhr
Tschadlagore
PEP572 vorgeschlagene Unterstützung für die :=
Operator in Python, um Variablenzuweisungen innerhalb von Ausdrücken zu ermöglichen.
Diese Syntax ist in Python 3.8 verfügbar.
@ z33k Die Frage wurde Jahre vor der Erstellung des PEP gestellt. Das beantwortet die Frage sicher nicht. Könnte aber ein Kommentar sein…
– bot47
23. Juni 2019 um 13:48 Uhr
@MaxRied Ich habe diese Antwort gerade über Google gefunden und es war genau das, wonach ich gesucht habe. Auch wenn es nicht relevant war, als die Frage gestellt wurde, ist es jetzt sicherlich relevant.
–AndreasT
2. Februar 2020 um 17:33 Uhr
PEP572 erlaubt es Python, all die bösen Fehler zu haben, die dieser Operator Leuten in C erlaubt.
– vy32
8. April 2020 um 14:41 Uhr
@vy32. Je mehr Sie einem kompetenten Benutzer erlauben, desto mehr Fehler können von allen eingeführt werden. Das ist kein Grund, sich einzuschränken, falls Sie das implizieren wollten.
– Verrückter Physiker
19. April 2021 um 16:39 Uhr
@MadPhysicist – Ich habe nicht impliziert, dass dieser Operator nicht zu Python 3.8 hinzugefügt werden sollte. Ich habe lediglich darauf hingewiesen, dass dies eine neue Fehlerquelle sein würde, und festgestellt, dass die =
Zuweisungsoperatoren in C haben eine lange und unruhige Geschichte.
– vy32
19. April 2021 um 17:25 Uhr
Dieses Symbol :=
ist ein Aufgabenverwalter in Python (meistens als Walross-Operator). Kurz gesagt, die Walross-Operator komprimiert unseren Code, um ihn etwas kürzer zu machen.
Hier ist ein sehr einfaches Beispiel:
# without walrus
n = 30
if n > 10:
print(f"{n} is greater than 10")
# with walrus
if (n := 30) > 10:
print(f"{n} is greater than 10")
Diese Codes sind identisch (und geben dasselbe aus), aber wie Sie sehen können, ist die Version mit dem Walross-Operator in nur zwei Codezeilen komprimiert, um die Dinge kompakter zu machen.
Zunächst einmal fühlen Sie sich nicht verpflichtet.
Ich selbst benutze diese sogar selten. Ich verwende nur den Walross-Operator, um meinen Code ein wenig zu komprimieren, hauptsächlich wenn ich damit arbeite Reguläre Ausdrücke.
Sie können auch Ihren eigenen Anwendungsfall finden. Wichtig ist, dass Sie eine ungefähre Vorstellung davon haben und wissen, wann es hilfreich sein könnte, wenn Sie auf ein Problem wie dieses gestoßen sind.
Und so kann ich bei weitem den Walross-Operator auf einer höheren Ebene erklären. Hoffe, du hast etwas gelernt.
Können Sie demonstrieren, wie der Walrus-Operator den Regex-Code komprimiert?
– Farhan Hai Khan
8. September 2022 um 5:24 Uhr
Clemens
Der Code in der Frage ist Pseudocode; dort, :=
stellt den Auftrag dar.
Für zukünftige Besucher könnte jedoch Folgendes relevanter sein: Die nächste Version von Python (3.8) wird einen neuen Operator erhalten, :=
erlauben Zuweisungsausdrücke (Details, motivierende Beispiele und Diskussionen finden Sie in PEP 572die Ende Juni 2018 vorläufig angenommen wurde).
Mit diesem neuen Operator können Sie Dinge wie diese schreiben:
if (m := re.search(pat, s)):
print m.span()
else if (m := re.search(pat2, s):
…
while len(bytes := x.read()) > 0:
… do something with `bytes`
[stripped for l in lines if len(stripped := l.strip()) > 0]
statt dieser:
m = re.search(pat, s)
if m:
print m.span()
else:
m = re.search(pat2, s)
if m:
…
while True:
bytes = x.read()
if len(bytes) <= 0:
return
… do something with `bytes`
[l for l in (l.stripped() for l in lines) if len(l) > 0]
Wera
Happy 3.8 Release am 14. Oktober!
Es gibt eine neue Syntax
:=
die Variablen Werte als Teil eines größeren Ausdrucks zuweist. Aufgrund seiner Ähnlichkeit mit den Augen und Stoßzähnen eines Walrosses wird es liebevoll „der Walrossoperator“ genannt.In diesem Beispiel hilft der Zuweisungsausdruck dabei, Aufrufe zu vermeiden
len()
zweimal:if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
Zeit ist sicherlich ein Pfeil
– Chadlagore
14. März 2020 um 0:54 Uhr
Mohidin bin Mohammed
:=
wird auch als bezeichnet Walross-Operator. Wir können diesen Walross-Operator verwenden, um einen Wert zuzuweisen und gleichzeitig eine Zustandsprüfung durchzuführen.
Z.B:
Ohne Walross-Operator:
a = 10
if a == 10:
print("yes")
Mit Walross-Operator:
if (a := 10) == 10:
print("Yes")
Wir können also variabel verwenden a
nicht nur in Aussage auch danach. Es weist der Variablen einfach einen neuen Wert zu und aktiviert die Bedingungsprüfung.
Zeit ist sicherlich ein Pfeil
– Chadlagore
14. März 2020 um 0:54 Uhr
Meine Vermutung ist, dass dies Pseudocode direkt aus diesem Wiki ist Artikel und möglicherweise fragt das OP, wie man diesen Code (der eine Aufgabe ist) in Python interpretiert
– Michael Petsch
23. September 2014 um 16:37 Uhr