【发布时间】:2013-10-31 02:18:27
【问题描述】:
我正在使用 Python (2.7.4) 中的切片:
class Foo():
def __getitem__(self, key):
# Single value
if isinstance(key, (int,long)):
return key
# Slice
if isinstance(key, slice):
print 'key.start = 0x{0:X} key.stop = 0x{1:X}'.format(key.start, key.stop)
length = key.stop - key.start
return str(length)
一切似乎都按预期工作:
>>> f = Foo()
>>>
>>> f[42]
42
>>>
>>> f[20:30]
key.start = 0x14 key.stop = 0x1E
'10'
除了切片索引似乎限制为 0x7FFFFFFF:
>>> f[0xFEDCBA98 : 0xFFFFFFFF]
key.start = 0x7FFFFFFF key.stop = 0x7FFFFFFF
'0'
>>> f[0x80000000:0x90000000]
key.start = 0x7FFFFFFF key.stop = 0x7FFFFFFF
'0'
为什么切片索引不像常规 int 值那样受到相同的 long 整数提升?有什么解决方法吗?
【问题讨论】:
-
有趣。我使用 Python 3.3.2 得到了正确的结果
-
@aIKid 谢谢 - 我没有立即访问 Python 3。这是有道理的,因为 Python 3 只有新样式的类......请参阅 my answer。
标签: python python-2.7 python-internals