是否有一种方法在默认参数之后使用所需的参数?(就像默认的python范围())



我正在编写一个类,试图重新创建默认的python范围类,但意识到初始化行为与通常不同。

通常,函数的必需参数必须位于默认参数的前面,例如:

def foo(a, b, c='bar'):
return a, b, c

但是在range()的情况下,你可以这样使用它。range(start, stop, step)。其中stop是唯一必需的参数。所以基本上:

print(list(range(5)))
print(list(range(2, 6)))
print(list(range(0, 10, 2)))
>>[0, 1, 2, 3, 4]
>>[2, 3, 4, 5, 6]
>>[0, 2, 4, 6, 8]

这是否意味着有一种方法可以编写一个函数,而所需的参数不必是第一个?它究竟是如何工作的,我该如何重新创建它?

提前感谢!!

当然有办法。如果没有别的,你可以这样做:

def foo(a, b = None, c = None ):
if not b and not c:
start = 0
stop = a
step = 1
elif not c:
start = a
stop = b
step = 1
else:
start = a
stop = b
step = c
print(f"{start = }, {stop = }, {step = }")
foo(2)
foo(1,2)
foo(1,2,3)

最新更新