功能定义如范围

the*_*olf 5 python function python-3.x

假设我想编写一个类似于范围的函数

回想一下,range有一个参数和2/3参数形式:

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
Run Code Online (Sandbox Code Playgroud)

如果我希望方法或函数具有相同的接口,是否有比这更优雅的方式:

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)
Run Code Online (Sandbox Code Playgroud)

mgi*_*nbr 5

这里没有太多建议,但是一个替代方案可能是使用可选参数并交换前两个,如果只提供了一个:

def range_like(start, stop=None, step=1):
    if stop is None:
        start, stop = 0, start
    ...
Run Code Online (Sandbox Code Playgroud)

  • 我没有给出downvote,但是如果`None`是一个有效的参数,你的两个答案都会有问题.考虑`slice()`接受类似的参数,`slice(1)`需要等同于`slice(None,1,None)`,但`slice(1,None)`需要等同于`slice(1 ,无,无)`. (3认同)