我只是想知道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。
感谢您的帮助。
答案 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