python - 字符串与列表类型及NoneType

1 投票
4 回答
670 浏览
提问于 2025-04-17 06:20

为什么这个会被判断为字符串类型:

>>> strng = 'spam'
>>> type(strng.replace('a', 'A')) 
>>> <type 'str'>

而这个却被判断为NoneType类型呢?

>>> list_a = ['spam']
>>> type(list_a.append('eggs')) 
>>> <type 'NoneType'>

4 个回答

2

因为 str.replace() 会返回一个新的字符串,这个字符串是经过修改的,而 list.append() 则是直接在原来的列表上进行修改,不会返回任何值。

4

如果你仔细看看你的命令,你会发现这个:

>>> strng.replace('a', 'A')
'spAm'
>>>

注意这个方法是有返回值的。当你调用 type() 的时候,实际上你是在调用这个:

>>> type('spAm')
<type 'str'>
>>>

现在看看你下一行代码:

>>> list_a.append('eggs')
>>>

注意到 什么都没有返回。当你对这个调用 type() 的时候,实际上你是在用一个 None 参数调用 type()

>>> type(None)
<type 'NoneType'>
>>> 
6

因为列表的 append 方法返回的是 None(换句话说,就是不返回任何东西),因为它会直接改变列表的内容。

在Python的标准库中,大多数(如果不是全部)会改变内容的方法都是这样工作的。

而字符串的 replace 方法则不会改变原来的字符串,因为Python中的字符串是不可变的。它会返回一个新的字符串,里面包含了替换后的内容。

撰写回答