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

时间:2011-11-15 05:01:25

标签: python

为什么这会评估为字符串类型:

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

但是这会计算出类型为NoneType?

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

4 个答案:

答案 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()会修改列表,而不会返回值。