1

これが私のコードです:

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'

ありがとう。

4

4 に答える 4

9

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]
于 2013-09-16T13:04:35.027 に答える
3

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']
于 2013-09-16T13:06:38.977 に答える
1

その場で動作するためappend()、つまりfoo、新しいリストを作成する代わりに直接変更します。

于 2013-09-16T13:05:45.163 に答える
0

list.append()引数(リスト)を変更するだけなので、有用なものは何も返しません。fooあなたはおそらく代わりに戻りたいと思うでしょう

于 2013-09-16T13:06:53.583 に答える