Warum werden diese Tupel von einer Funktion identisch zurückgegeben?

7

Sagen wir, ich habe eine Funktion:

%Vor%

In IDLE, wenn ich rufe:

%Vor%

Es wird True

gedruckt

Wenn ich rufe:

%Vor%

Es wird False

gedruckt

Weißt du warum? Ich kann keine Erklärung in der Python-Dokumentation finden.

    
Vadim Sentyaev 22.07.2017, 22:33
quelle

3 Antworten

17

Die CPython-Implementierung von Python speichert konstante Werte (wie Zahlen, Strings, Tupel oder Freezens), die in einer Funktion als Optimierung verwendet werden. Sie können sie über func.__code__.co_consts :

beobachten %Vor%

Wie Sie sehen können, werden für diese Funktion die Konstanten None (der Standard Rückgabewert), 1 und (1,) gespeichert. Da die Funktion einen von ihnen zurückgibt, erhalten Sie mit jedem Aufruf das exakt gleiche Objekt.

Da dies ein CPython-Implementierungsdetail ist, wird es nicht von der Python-Sprache garantiert. Das ist wahrscheinlich, warum Sie es in der Dokumentation nicht finden konnten:)

    
Eugene Yarmash 22.07.2017, 22:42
quelle
6

Python optimiert den Rückgabewert.
Da der Interpreter leicht erkennen kann, dass das zurückgegebene Tupel jedes Mal dasselbe ist und ein unveränderliches Objekt ist, gibt es das gleiche Objekt zurück (genau das gleiche. Gleiche Speicheradresse).
Wenn Sie a is b eingeben, fragen Sie tatsächlich id(a) == id(b) .

    
Yuval Ben-Arie 22.07.2017 22:39
quelle
0

Vielleicht liegt es an Adressen im Speicher. Versuchen Sie einfach, sie über zu drucken Druckspeicheradresse der Python-Variablen

    
Krystofee 22.07.2017 22:37
quelle

Tags und Links