python - 字符串与列表类型及NoneType
为什么这个会被判断为字符串类型:
>>> 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中的字符串是不可变的。它会返回一个新的字符串,里面包含了替换后的内容。