これが私のコードです:
def list_test(foo):
bar = foo.append('w')
return bar
my_input = [7,8,9]
私がそれを実行すると:
>>>print list_test(my_input)
None
プリントアウトNone
です。なんで?どうすれば修正できますか?
注:必要な出力は次のとおりです。7,8,9,'w'
ありがとう。
これが私のコードです:
def list_test(foo):
bar = foo.append('w')
return bar
my_input = [7,8,9]
私がそれを実行すると:
>>>print list_test(my_input)
None
プリントアウトNone
です。なんで?どうすれば修正できますか?
注:必要な出力は次のとおりです。7,8,9,'w'
ありがとう。
list.append()
None を返し、変更呼び出しであるという事実を強調します。引数を変更するこのような呼び出しは、通常、None を返します。新しいリストを作成する呼び出しはそれを返します。
変更されたリストを返すことが重要な場合list_test
、コードは次のようになります。
def list_test(foo):
foo.append('w')
return foo
my_input = [7,8,9]
>>> print list_test(my_input)
[7, 8, 9, 'w']
>>> print my_input
[7, 8, 9, 'w']
しかし、もし私がこれを書いていたら、変更呼び出しは None を返すという規則に従い、次のように書きます:
def list_test(foo):
foo.append('w')
my_input = [7,8,9]
>>> print list_test(my_input)
None
>>> print my_input
[7, 8, 9, 'w']
最後に、list_test を変化させないようにしたい場合、つまり、新しいリストを返し、その入力を変更しないようにする必要がある場合は、次のいずれかが機能する可能性があります。
def list_test(foo):
new_foo = list(foo)
new_foo.append('w')
return new_foo
def list_test(foo):
return foo + ['w']
my_input = [7,8,9]
>>> print list_test(my_input)
[7, 8, 9, 'w']
>>> print my_input
[7, 8, 9]
append
リストは返されませんが、元のリストが変更されます。したがって、 を呼び出した後foo.append()
、foo の内容が変更されました。それfoo
自体は、新しい要素を持つ「新しい」(そして古い)リストです。したがって、次のように関数を記述できます。
def list_test(foo):
foo.append('w')
return foo
これは、関数に渡した元のリストも変更されたことを意味することに注意してください。
>>> my_input = [7,8,9]
>>> list_test(my_input)
[7, 8, 9, 'w']
>>> my_input
[7, 8, 9, 'w']
その場で動作するためappend()
、つまりfoo
、新しいリストを作成する代わりに直接変更します。
list.append()
引数(リスト)を変更するだけなので、有用なものは何も返しません。foo
あなたはおそらく代わりに戻りたいと思うでしょう