Wie kann man beweisen, dass die Parameterauswertung in Python "von links nach rechts" ist?

8

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).

    
BugShotGG 05.10.2012, 15:18
quelle

6 Antworten

14
%Vor%     
Fred Foo 05.10.2012, 15:27
quelle
4

Zerlegen Sie den Funktionsaufruf.

%Vor%     
Ignacio Vazquez-Abrams 05.10.2012 15:26
quelle
4

Verwenden von Python 3:

%Vor%

Archiv:

%Vor%

Seltsamerweise (zuerst) erzeugt dieser Code:

%Vor%

Allerdings macht dis(f) dies klarer:

%Vor%

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.

    
Anuj Gupta 05.10.2012 15:30
quelle
1

Eine benutzerdefinierte Klasse kann hier helfen:

%Vor%

und wenn ausgeführt:

%Vor%     
Ethan Furman 05.10.2012 15:59
quelle
1

Das zeigt es auch IMHO:

%Vor%

Bearbeiten:

%Vor%     
user688635 05.10.2012 15:46
quelle
0

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üfen

Extra 2: Bitte seien Sie vorsichtig mit dem folgenden Szenario:

%Vor%     
George 19.11.2014 18:54
quelle