这是我的代码:
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
返回