为什么这会评估为字符串类型:
>>> strng = 'spam'
>>> type(strng.replace('a', 'A'))
>>> <type 'str'>
但是这会计算出类型为NoneType?
>>> list_a = ['spam']
>>> type(list_a.append('eggs'))
>>> <type 'NoneType'>
答案 0 :(得分:5)
因为列表中的append
方法返回None(或者说,另一种方式......不返回任何内容),因为它会改变列表。
大多数(如果不是全部)python标准库中的变异方法都是这样的。
字符串上的 replace
不会变异,因为python字符串是不可变的。返回一个带有替换的新字符串。
答案 1 :(得分:4)
如果你再看一下你的命令,你会看到:
>>> strng.replace('a', 'A')
'spAm'
>>>
注意此方法如何返回某些内容。当你致电type()
时,你基本上是在说这个:
>>> type('spAm')
<type 'str'>
>>>
现在是您的下一行代码:
>>> list_a.append('eggs')
>>>
请注意没有返回任何内容。当您致电type()
时,您基本上是使用type()
参数致电None
:
>>> type(None)
<type 'NoneType'>
>>>
答案 2 :(得分:2)
字符串是不可变的,因此replace
唯一合理的做法是返回更改后的值。列表是可变的,因此append
不必返回任何内容,如果没有明确的return
,则返回None
。您可以说append
应返回某些内容,但这可能会让人们相信append
答案 3 :(得分:2)
由于str.replace()会返回包含修改后值的新字符串,而list.append()会修改列表,而不会返回值。