从下标表示法构建切片对象

时间:2014-10-19 17:56:22

标签: python slice

我想从下标符号中获取切片对象。到目前为止,我已经使用了一个hacky技巧来利用Python内置的下标来切换转换功能:

class Slice:
    def __getitem__(self, item):
        return item

例如,Slice()[1:2]将返回slice(1,2,None)

有没有人知道更简单的方法?

1 个答案:

答案 0 :(得分:2)

如果必须使用下标表示法,那么除了使用type创建的动态类之外,您当前的解决方案是最紧凑的:

>>> Slice = type('', (), {'__getitem__': lambda _, x: x})()
>>> Slice[1:2]
slice(1, 2, None)
>>> Slice[1:2:3]
slice(1, 2, 3)
>>>

但是这样的代码通常很难理解/维护/扩展/等等。

相反,我建议您使用slice,它允许您直接创建切片对象:

>>> slice(1, 2)
slice(1, 2, None)
>>> slice(1, 2, 3)
slice(1, 2, 3)
>>>

内置是专门为此目的而设计的(好吧,还有其他一些例如使用isinstance进行类型检查),因此非常便携以及pythonic。