2012-04-22 17 views
6
def change(s): 
    s = s + "!" 


word = "holiday" 
change(word)  
print word 

Wie kommt die Ausgabe von diesem ist "Urlaub" statt "Urlaub!"? Liegt es daran, dass die 3 Codezeilen außerhalb der Funktion liegen? Wenn ja, warum würde es eine Rolle spielen, wenn es außerhalb der Funktion liegt, da es nach der Änderungsfunktion ist?Verketten von Strings?

+1

Ist dies Ihre Situation erklärt im Allgemeinen: http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference – jdi

+0

Danke für Ihre Hilfe, jdi – alicew

Antwort

6

Try this:

def change(s): 
    return s + "!" 

es wie folgt verwendet:

word = 'holiday' 
print change(word) 

Oder so:

word = 'holiday' 
word = change(word) 
print word 

Beachten Sie, dass alle Änderungen an einer Parameterzeichenfolge innerhalb einer Funktion nicht außerhalb der Funktion angezeigt werden, da der s Parameter in der Funktion lokal für den Bereich der Funktion ist und alle Änderungen (wie im Code in der Frage) wird nur innerhalb der Funktion sichtbar sein, nicht außerhalb. Alle Funktionsparameter in Python sind passed by value.

+0

Danke vielmals! :) – alicew

+0

@alicew du bist willkommen! Bitte lesen Sie den Link im letzten Abschnitt meiner Antwort, um zu verstehen, was mit der Zeichenfolge in Ihrer Funktion passiert. –

+0

@alicew auch, bitte nicht vergessen, als richtig zu akzeptieren (klicken Sie auf das Häkchen auf der linken Seite) die Antwort, die am hilfreichsten war –

1

Sie geben den Wert aus der Änderung nicht zurück.

Versuchen:

def change(s): 
    s = s + "!" 
    return s 


word = "holiday" 
word = change(word)  
print word 

So im obigen Beispiel, s geändert wird, und dann wird das Wort des geändertenen Wert zugewiesen.

3

Sie ändern nur die lokale Variable s in der Funktion . Dies ändert nicht die Variable word. Wenn Sie ändern word wollen, müssen Sie das Ergebnis der change zurückzukehren und weisen es word:

def change(s): 
    s = s + "!" 
    return s 


word = "holiday" 
word = change(word)  
print word 
1

Sie übergeben eine 'Kopie' des Worts und nicht diese Wortinstanz an die Funktion. Daher Änderungen an der Kopie des Wortes angewendet werden Sie in s Variable innerhalb der Funktion halten

+0

Okay, danke! – alicew

+1

Das ist nicht wahr. Python übergibt einen Verweis auf den Wert.Er überschattet nur die Variable mit einer lokalen – jdi

+0

Das ist eine genauere Erklärung; aber im gegebenen Szenario hilft es zu erklären, dass es als Ergebnis von Shadowing und verschiedenen Bereichen scheint, dass Sie an einer Kopie arbeiten. – jbreicis

1

s in change(s) ist ein Name, der auf den Wert von word gebunden ist, wenn Sie change(word) nennen.

In der Zeile s = s + "!" Sie s auf eine neue Zeichenfolge verbindlich sind, die an s und ! gebunden durch Verketten der Wert erstellt wird, nichts zu tun word.

Auch ist es am besten, keine Nebenwirkungen zu haben, auch wenn es möglich ist, also ist die Rückgabe eines neuen Wertes besser.

def change(s): 
    return s + '!' 
+1

Danke für Ihre Hilfe :) – alicew

Verwandte Themen