def change(s):
s = s + "!"
word = "holiday"
change(word)
print word
为什么这个输出是“holiday”而不是“holiday!”?是不是因为 3 行代码在函数之外?如果是这样,为什么它在函数之外,因为它在更改函数之后?
试试这个:
def change(s):
return s + "!"
像这样使用它:
word = 'holiday'
print change(word)
或者像这样:
word = 'holiday'
word = change(word)
print word
请注意,您对函数内部的参数字符串所做的任何修改都不会在函数外部看到,因为函数中的s
参数在函数范围内是本地的,并且您所做的任何更改(如问题中的代码) ) 只会在函数内部可见,而不是外部可见。Python 中的所有函数参数都是按值传递的。
您只是在修改s
函数中的局部变量change
。这不会修改变量word
。如果你想修改word
,你需要返回结果change
并将其分配给word
:
def change(s):
s = s + "!"
return s
word = "holiday"
word = change(word)
print word
您没有从更改中返回值。
尝试:
def change(s):
s = s + "!"
return s
word = "holiday"
word = change(word)
print word
所以在上面的例子中, s 正在被修改,然后 word 被重新分配修改后的值。
您正在将单词的“副本”而不是单词实例传递给函数。因此,更改将应用于您在函数内的 s 变量中保存的单词副本
s
inchange(s)
是一个名称,它绑定到word
调用时的值change(word)
。
在该行s = s + "!"
中,您将绑定s
到一个新字符串,该字符串是通过连接绑定到s
and的值创建的!
,而不是对word
.
即使有可能,最好不要产生副作用,因此返回一个新值会更好。
def change(s):
return s + '!'