假设我想编写一个类似于range的函数。
回想一下,range有一个参数和两个/三个参数的形式:
class range(object)
| range(stop) -> range object
| range(start, stop[, step]) -> range object
如果我想让方法或函数具有相同的接口,是否有比这更优雅的方式:
def range_like(*args):
start,stop,step=[None]*3
if len(args)==1:
stop=args[0]
elif len(args)==2:
start,stop=args
elif len(args)==3:
start,stop,step=args
else:
raise ValueError
print(start,stop,step)
None
是一个有效的参数,那么你两个回答都有问题。考虑到slice()
接受类似的参数,slice(1)
需要等同于slice(None, 1, None)
,但是slice(1, None)
需要等同于slice(1, None, None)
。 - Andrew Clark