当我尝试使用Python 2.7进行切片实验时,发现了一种奇怪的行为:
当在括号中使用单个冒号时,切片对象的起始为0,结束为一个巨大的整数。然而,当我使用多个冒号时,如果未指定,则起始和结束都为None。
这种行为是保证还是实现特定的? 文档 表示第二个和第三个情况是扩展切片,而第一个情况不是。然而,我找不到任何关于基本切片和扩展切片之间差异的清晰解释。
当我重写 __getitem__ 并想要接受扩展切片时,是否还有其他“特殊情况”需要注意?
class A:
def __getitem__(self, i):
print repr(i)
a=A()
a[:] #Prints slice(0, 9223372036854775807, None)
a[::] #prints slice(None, None, None)
a[:,:] #prints (slice(None, None, None), slice(None, None, None))
当在括号中使用单个冒号时,切片对象的起始为0,结束为一个巨大的整数。然而,当我使用多个冒号时,如果未指定,则起始和结束都为None。
这种行为是保证还是实现特定的? 文档 表示第二个和第三个情况是扩展切片,而第一个情况不是。然而,我找不到任何关于基本切片和扩展切片之间差异的清晰解释。
当我重写 __getitem__ 并想要接受扩展切片时,是否还有其他“特殊情况”需要注意?
2147483647
(2^31-1),因此该值明显与系统相关。而在Python 3中,无论什么情况下,我都得到的是None
。 - tobias_kA
改为新式类,它也会变成None
。 - Aran-Fey