允许整数索引或索引迭代器的正确pythonic方法是什么?
我已经为我正在进行的项目实现了一个网格小部件,我意识到我希望我的用户能够同时选择多个行/列。但是,我不希望它们使用迭代器来指示单行/列选择。
下面是我工作的一些演示代码,但它并不是一个合适的解决方案:
def toIter ( selection ):
if selection is None:
return []
elif isinstance ( selection, int ):
return (selection,)
else:
return selection
def test ( selection ):
for col in toIter(selection):
print(col) # this is where I would act on the selection
test ( None )
test ( 7 ) # user can indicate a specific column selected...
test ( range(3,7) ) # or a tuple/range/list/etc of columns...
编辑:添加了使用无表示没有选择的能力......
第二次编辑:我真的认为python应该能够做到这一点,但它抱怨整数和NoneType不可迭代:
def test ( selection ):
for col in selection:
print(col)
答案 0 :(得分:1)
您可能只想覆盖窗口小部件类中的__getitem__
,并支持整数和切片。像这样:
class Widget(object):
def __getitem__(self, selection):
if isinstance(selection, int):
#return selected col
elif isinstance(selection, slice):
#return cols based on selection.start/stop/step
else:
raise TypeError('bad selection')
然后您可以使用:
w = Widget()
w[4] # get 4th col
w[8:16] # get 8-16th cols
您还可以对此进行增强,以通过切片元组支持二维访问,可以像w[1:4, 5:8]
一样访问。