2017-06-30 5 views
0

Da ich weiß, dass ganze Zahlen unveränderlich sind, wie würde ich 4 anstelle von 2 drucken?Ändern eines unveränderlichen Objekts in Python, Methoden?

a = 2 
def add(num): 
    num = 4 
print(a)  
+0

Können Sie erklären, was in diesem Codebeispiel vor sich geht? Was ist dein Endspiel hier? – Will

+2

Nur weil die Ganzzahl selbst unveränderlich ist, bedeutet das nicht, dass Sie eine andere ganzzahlige Referenz auf "a" zuweisen. Ist das, was du fragst? Es ist nicht sehr klar, Ihre Frage ist nicht detailliert. –

+1

fügen Sie Ihrer 'add'-Methode eine Zeile' return num' hinzu – davedwards

Antwort

0

Scheint, wie das ist, was Sie versuchen zu erreichen:

a = 2 
def add(): 
    global a 
    a = 4 

add() 
print(a) 

Die add() Funktion einen Wert von ändern zu 4 und wäre der Ausgang 4.

0

In Python, Variablen sind nur Körbe, die Werte halten. Wenn Sie möchten, dass a einen anderen Wert enthält, legen Sie ihn einfach ein.

a = 2 # value 
a = 3 # new value 

Obwohl die ganze Zahl 2 unveränderlich ist, ist nur ein Objekt a Verweis auf diese Ganzzahl. a selbst - die Objektreferenz- kann geändert werden, um jedes Objekt zu jeder Zeit zu referenzieren.

Wie Sie entdeckt haben, können Sie nicht einfach eine Variable an eine Funktion übergeben und seinen Wert ändern:

def f(a): 
    a = 4 
f(a) 
print(a) # still 3 

Warum 3 noch? Denn in Python werden Objekte mit * Objektreferenz * übergeben. Dies ist weder gleichbedeutend mit dem Wert, noch ist es in anderen Sprachen gleichbedeutend.

Die a innerhalb der Funktion ist eine andere Objektreferenz als außerhalb der Funktion. Es ist ein anderer Namensraum. Wenn Sie die Funktion so ändern möchten, dass a die andere, endgültige a ist, müssen Sie explizit angeben, dass dies das ist, was Sie wollen.

def f(): 
    global a # this makes any following references to a refer to the global namespace 
    a = 4 
f() 
print (a) # 4 

Ich empfehle this link zur weiteren Lektüre hoch.

+0

Oder einen veränderbaren Typ verarbeiten : 'def f (a):' 'a [0] = 5'' L = [3] '' f (L) '' drucken (L [0]) '- ein wenig verschachtelt, aber es dient als anständig Beispiel. – Baldrickk

Verwandte Themen