def change(s):
s = s + "!"
word = "holiday"
change(word)
print word
這是「假日」的輸出而不是「假期!」的輸出?是否因爲3行代碼在功能之外?如果是這樣,爲什麼它在功能之外,因爲它在更改功能之後呢?連接字符串?
def change(s):
s = s + "!"
word = "holiday"
change(word)
print word
這是「假日」的輸出而不是「假期!」的輸出?是否因爲3行代碼在功能之外?如果是這樣,爲什麼它在功能之外,因爲它在更改功能之後呢?連接字符串?
試試這個:
def change(s):
return s + "!"
使用方法如下:
word = 'holiday'
print change(word)
或者像這樣:
word = 'holiday'
word = change(word)
print word
請注意,對函數內的參數字符串所做的任何修改都會在函數外部看到而不是,因爲函數中的s
參數對於函數的作用域是本地的,並且您做的任何更改(如在問題中的代碼中)只會在函數內部可見,而不在外部。 Python中的所有函數參數都是passed by value。
非常感謝! :) – alicew 2012-04-22 17:45:29
@alicew不客氣!請閱讀我答案最後一段中的鏈接,以充分理解函數內部字符串的情況。 – 2012-04-22 17:47:46
@alicew也請不要忘記接受正確的答案(點擊左邊的複選標記)最有幫助的答案 – 2012-04-22 17:49:39
您沒有從變化中返回價值。
嘗試:
def change(s):
s = s + "!"
return s
word = "holiday"
word = change(word)
print word
因此,在上面的例子中,S是被修改,然後字重新分配將該修改值。
您只修改函數change
中的局部變量s
。這不會修改變量word
。如果你想修改word
,你需要將它返回change
的結果,並分配給word
:
def change(s):
s = s + "!"
return s
word = "holiday"
word = change(word)
print word
在change(s)
s
裏面,當你調用change(word)
綁定到的word
值的名稱。
在s = s + "!"
要綁定s
,其是通過將勢必s
和!
值創建一個新的字符串行了,沒有做任何事情來word
。
此外,即使有可能,最好不要有副作用,因此返回新值更好。
def change(s):
return s + '!'
感謝您的幫助:) – alicew 2012-04-22 17:45:53
這說明您的情況更加普遍:http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference – jdi 2012-04-22 17:48:50
感謝您的幫助,JDI – alicew 2012-04-22 18:21:59