Zum Beispiel könnten wir in JavaScript ein Programm wie dieses schreiben:
%Vor%und wir würden eine Ausgabe bekommen:
%Vor%Dies bedeutet, dass Parameter in JavaScript wirklich von links nach rechts ausgewertet werden. In C würden wir ausgeben
%Vor%Ich habe mich gefragt, ob wir das gleiche in Python machen könnten, oder ist es unmöglich, da es sich um eine Value Reference Language handelt?
Ich habe ein einfaches Programm gemacht, aber ich denke, das beweist nichts:
%Vor% %Vor% Python lässt mich keine neue Zuweisung innerhalb des Funktionsparameters machen, wenn ich sie aufruft (zum Beispiel f(x=4, x, x)
oder etwas Ähnliches).
Verwenden von Python 3:
%Vor%Archiv:
%Vor%Seltsamerweise (zuerst) erzeugt dieser Code:
%Vor% Allerdings macht dis(f)
dies klarer:
Die Ausgabe von dis(f)
entspricht der von uns erwarteten L-to-R-Auswertung. Im Wesentlichen ist diese "Diskrepanz" eine Konsequenz, dass print()
zuletzt ausgewertet wird. Bis dahin hat sich der Wert von a
in [1, 2, 3]
geändert und dasselbe endgültige Objekt wird dreimal gedruckt.
Wenn wir a
durch a[:]
ersetzen, erhalten wir das erwartete Ergebnis.
Eine benutzerdefinierte Klasse kann hier helfen:
%Vor%und wenn ausgeführt:
%Vor%Kurze Antwort: von links nach rechts
Beispiel: Da dies eine Frage ist, die mir immer in den Sinn kommt, wenn ich arithmetische Operationen mache (sollte ich in float und welche Zahl umwandeln), wird ein Beispiel aus diesem Aspekt vorgestellt:
%Vor%Wenn wir ganze Zahlen teilen, wird es nicht überraschend kleiner gerundet.
%Vor%Wenn wir die letzte Ganzzahl in float schreiben, erhalten wir immernoch null, da zu der Zeit, wenn unsere Zahl geteilt wird, der Gleitkomma wegen der Ganzzahldivision bereits 0 geworden ist.
%Vor%Gleiches Szenario wie oben, aber die Float-Typumwandlung etwas näher an die linke Seite verschieben.
%Vor%Schließlich, wenn wir die erste Ganzzahl in float schreiben, ist das Ergebnis das gewünschte, da beginnend mit der ersten Division, d. h. der am weitesten links liegenden, wir Floats verwenden.
Extra 1: Wenn Sie versuchen, das zu beantworten, um die arithmetische Auswertung zu verbessern, sollten Sie dies
überprüfenExtra 2: Bitte seien Sie vorsichtig mit dem folgenden Szenario:
%Vor%Tags und Links python parameter-passing order-of-evaluation