这是我的代码:
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'
感谢。
答案 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
而不是