为什么mystring.split(“”)。append(“foo”)什么都不返回?

时间:2014-03-29 23:53:51

标签: python string list python-3.x

我有一个存储提示符的变量,如下所示:(path>in>the>cli) 我想将其更新为(path>in>the>cli>foo)并附带此内容:

 prompt = ">".join(prompt.replace(")","").split(">").append('foo')) + ")"

但我有类型错误,因为prompt.replace(")","").split(">").append('foo')返回None

为什么它会返回None而不是['(path', 'in', 'the', 'cli', 'foo']

3 个答案:

答案 0 :(得分:4)

append()修改“就地”列表并返回None

>>> print(prompt.replace(")","").split(">").append('foo'))
None

您需要通过+

将项目附加到列表中
>>> ">".join(prompt.replace(")","").split(">") + ['foo']) + ")"
'(path>in>the>cli>foo)'

答案 1 :(得分:3)

list.append始终返回None,而不是列表。这是故意的,因为它强调附加变异列表。来自the docs

  

您可能已经注意到插入,删除或排序等方法   修改列表没有打印返回值 - 它们返回None。   这是Python中所有可变数据结构的设计原则。

所以,你需要做三行:

items = prompt.replace(")","").split(">")
items.append('foo')
prompt = '>'.join(items)

答案 2 :(得分:1)

最开始的一个最重要的两个词(一种新语言或一种新的!)软件工程师可能会“试一试!”。当你有一个像Python一样可爱的REPLy时,你真的应该尝试一下。

>>> a = []
>>> a.append(1)
>>> a
[1]

您可以使用+将列表连接到>>> a + [1] [1, 1] ,如下所示:

append

或者您可以将列表存储在中间变量中,然后使用None附加到该列表,该{{1}}实际附加到列表中,然后返回{{1}}。