我想从下标符号中获取切片对象。到目前为止,我已经使用了一个hacky技巧来利用Python内置的下标来切换转换功能:
class Slice:
def __getitem__(self, item):
return item
例如,Slice()[1:2]
将返回slice(1,2,None)
。
有没有人知道更简单的方法?
答案 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。