为什么“追加('w')”返回None?

时间:2013-09-16 13:02:48

标签: python python-2.7

这是我的代码:

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 个答案:

答案 0 :(得分:9)

list.append()返回None以强调它是一个变异调用的事实。修改其参数的此类调用通常返回None。创建 new 列表的调用会返回它。

如果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]

答案 1 :(得分: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']

答案 2 :(得分:1)

因为append()就地工作,即直接修改foo而不是创建新列表。

答案 3 :(得分:0)

list.append()不会返回任何有用的内容,因为它只会修改其参数(列表)。您可能希望返回foo而不是