2010-06-21 9 views
8

Ich habe eine Methode:Python: Kann man konstante Parameter deklarieren?

def foo(bar): 
    # ... 

Gibt es eine Möglichkeit bar als konstant zu markieren? ZB "Der Wert in bar kann nicht geändert werden" oder "Das Objekt, auf das bar zeigt, kann nicht geändert werden".

+0

Referenzen sind immer "const", aber Werte sind nicht (Sie können nicht ändern, worauf "bar" zeigt, aber wenn "bar" änderbar ist, können Sie den Wert ändern). Natürlich ist das nicht wirklich wahr, da Sie mit dem Stapelrahmen Ihrer Eltern umgehen und ändern können, auf was "Balken" zeigt, aber vorausgesetzt, dass Sie nicht auf solche Hacker zurückgreifen, gilt die Regel allgemein. –

+1

@NickBastin: Was? 'bar =" changed! "' - Ich habe gerade geändert, auf was "bar" 'zeigt (wird zugewiesen, um korrekt zu sein). –

+0

@EthanFurman: Nicht genau. Mein Punkt ist, dass Sie nicht ändern können, welche "Balken" Referenzen im übergeordneten Stapelrahmen - Sie können natürlich den Namen "bar" lokal zuweisen, um das Objekt, das Sie übergeben wurden zu verbergen, aber das Objekt existiert immer noch und bleibt unverändert in der Elternteil. –

Antwort

5

Wenn Balken ein einfügbares Objekt ist, wird der Balken während der Funktion nicht geändert.

Sie können auch ein eigenes konstantes Objekt erstellen. The recipie here.

+0

Beachten Sie, dass das Abfangen von Änderungen das Problem nicht alleine löst. Woher wissen Sie, dass der Client-Code keinen ConstError findet? Nur bei ausreichender Prüfung. –

+0

'bar = 0' - Ich habe gerade den Balken geändert (das ursprüngliche Objekt, dem 'bar' zugewiesen wurde, bleibt unwirksam). –

-2

Nr.

Was ist der Sinn? Wenn Sie die Funktion schreiben, ist es nicht bis Sie, um sicherzustellen, bar ändert sich nicht? Oder wenn Sie die Funktion anrufen, wen interessiert das?

+0

Es ist oft eine nützliche Richtlinie - Sie informieren den Benutzer über eine Einschränkung Ihrer Funktion. Natürlich ist das in Python nicht so sinnvoll, da es keine Prototypen gibt, und es gibt auch keinen statischen Compiler, der die Einschränkung erzwingt. –

+7

Es geht darum, dem Programmierer zu helfen, Fehler so weit wie möglich zu vermeiden. Sonst würden wir alle alles in Assembly schreiben. –

+0

@ Jeremy Friesner: In Python ist der "richtige" Weg, dies zu tun, nur einen Kommentar zu schreiben. – carl