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 回答