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