2

好的,所以我正在学习Udacity课程,并且一直试图通过 Python 字符串操作找出这个特殊的怪癖。

鉴于这种情况,

 1     x = ''    
 2     print x[0]

我应该在第 2 行得到一个“索引超出范围”错误,因为空字符串中没有第 0 个位置。

但在这种情况下,

 1     x = ''    
 2     print x[0:]

无论如何都不会出现索引错误。这是为什么?子序列运算符如何绕过看似应该存在的索引错误?

提前感谢您的帮助!


如果我不清楚,这里是一个 80 秒解决我正在谈论的问题的链接(对我当前的问题的解释不太令人满意)。

4

1 回答 1

2

x[0]预计将返回单个元素,甚至可以是None. (例如,[None][0] == None)那么当索引 0 处没有任何内容时,它会返回什么?它不能返回任何东西——它甚至不能返回,因为它实际上是在那个索引处None是模棱两可的。None它必须引发异常。

x[0:]另一方面,返回一个包含 0 个或更多元素的列表,因此它可以通过返回一个空列表来返回 'I found nothing'。(请注意,这x[0:]不是通过调用x[0] x[1]等实现的,而是使用不同的底层代码。)

于 2013-03-26T01:56:08.433 回答