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 変数に保持する単語のコピーに適用されます
sinは、を呼び出したときにchange(s)の値にバインドされる名前です。wordchange(word)
にバインドされた値を連結することによって作成された新しい文字列にs = s + "!"バインドしている行では、 andに何もしません。ss!word
また、可能であっても副作用がないことが最善であるため、新しい値を返すことをお勧めします。
def change(s):
return s + '!'