深入了解蟒蛇的范围功能

时间:2016-11-01 14:39:21

标签: python python-3.x

我只是想知道pythons range()函数的某些方面。

如果你给它一个像range(10)这样的参数,它将把这个论点作为停止点。如果你给两个args,它将把它们作为start, stop,如果你给三个args,它将把它们作为start, stop, steps处理。

参数的顺序如何变化?只有一个论点,它只是"停止",但文档说"开始,停止,步骤"!

例如,如果我使用默认参数创建一个函数(我认为它必须对此进行操作),例如foo(bar=None, baz=None, arg=None),并将其称为foo(1, 2)," bar&# 34;将是1和" baz"将是2。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果你想做类似的事情,你可以接受任意数量的参数,然后在必要时手动提出错误

def foo(*args):
    if not args:
        raise TypeError("foo expected 1 arguments, got 0")
    elif len(args)>3:
        raise TypeError("foo expected at most 3 arguments, got {}".format(len(args)))
    pass

然后根据start = args[0]

分配len(args)

答案 1 :(得分:1)

如果我正确理解了您的问题,您想知道range函数如何以start, stop, steps的顺序定义,如果给出一个像range(10)这样的参数可以将其用作stop参数而不是第一个start

我想代码可能是这样的:

def range(start=0, stop=None, steps=None):
    if stop is None:
        stop = start
        start = 0
    ...

然后它可以继续

答案 2 :(得分:-2)

你是说这个吗?

>>> def range_named_args(**args):
        if 'start' not in args.keys():
            args['start'] = 0
        if 'steps' not in args.keys():
            return(range(args['start'],args['stop']))
        else:
            return(range(args['start'],args['stop'],args['steps']))


>>> for i in range_named_args(stop = 3):
        print(i)
0
1
2
>>> for i in range_named_args(stop = 5, start = 2):
        print(i)
2
3
4
>>> for i in range_named_args(steps = 2, stop = 6, start = 2):
        print(i)
2
4