【发布时间】:2016-12-26 12:48:09
【问题描述】:
在尝试切片时,我注意到 Python 2.7 中有一个奇怪的行为:
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 作为开始,以一个大整数作为结束。但是,当我使用多个冒号时,如果未指定,则 start 和 stop 为 None。
这种行为是有保证的还是特定于实现的?
Documentation 表示第二种和第三种情况是扩展切片,而第一种情况不是。但是,对于基本切片和扩展切片之间的区别,我找不到任何明确的解释。
当我覆盖 __getitem__ 并希望接受扩展切片时,是否还有其他“特殊情况”需要注意??
【问题讨论】:
-
使用 Python 2.7,我得到
2147483647(2^31-1),因此该值绝对是特定于系统的。使用 Python 3,我在所有情况下都得到None。 -
如果您将
A设为新样式类,它也会更改为None。
标签: python python-2.7