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


word = "holiday"
change(word)    
print word

为什么这个输出是“holiday”而不是“holiday!”?是不是因为 3 行代码在函数之外?如果是这样,为什么它在函数之外,因为它在更改函数之后?

4

5 回答 5

6

试试这个:

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

像这样使用它:

word = 'holiday'
print change(word)

或者像这样:

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

请注意,您对函数内部的参数字符串所做的任何修改都不会在函数外部看到,因为函数中的s参数在函数范围内是本地的,并且您所做的任何更改(如问题中的代码) ) 只会在函数内部可见,而不是外部可见。Python 中的所有函数参数都是按值传递的

于 2012-04-22T17:41:36.523 回答
3

您只是在修改s函数中的局部变量change。这不会修改变量word。如果你想修改word,你需要返回结果change并将其分配给word

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


word = "holiday"
word = change(word)    
print word
于 2012-04-22T17:40:37.870 回答
1

您没有从更改中返回值。

尝试:

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


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

所以在上面的例子中, s 正在被修改,然后 word 被重新分配修改后的值。

于 2012-04-22T17:39:31.457 回答
1

您正在将单词的“副本”而不是单词实例传递给函数。因此,更改将应用​​于您在函数内的 s 变量中保存的单词副本

于 2012-04-22T17:43:46.443 回答
1

sinchange(s)是一个名称,它绑定到word调用时的值change(word)

在该行s = s + "!"中,您将绑定s到一个新字符串,该字符串是通过连接绑定到sand的值创建的!,而不是对word.

即使有可能,最好不要产生副作用,因此返回一个新值会更好。

def change(s):
    return s + '!'
于 2012-04-22T17:45:30.283 回答