默认和非默认参数的顺序

use*_*312 15 python argument-passing

在Python中,我理解默认参数出现在最后,非默认参数不能遵循默认参数.那样就好.例如:

>>> def foo(x=0, y):
        return x, y
SyntaxError: non-default argument follows default argument
Run Code Online (Sandbox Code Playgroud)

这没关系.

但是,当我想要第一个参数应该是默认参数的情况呢?例如,从上面的代码可以看出,x必须是第一个参数,它应该具有默认值0.

是否有可能做到这一点?我问,因为即使在range函数中,我猜它是这样的:

def range(start=0, end):
    pass
Run Code Online (Sandbox Code Playgroud)

那么这是如何完成的,如果不可能,这是如何实现的range呢?请注意,我坚持认为第一个参数是默认值,即整个点.我用它range作为一个例子,因为它完全符合我的问题.当然,一个可以实现rangedef range(end, start=0),但是这不是重点.

Joc*_*zel 10

嗯,rangeC代码可以做得更好.无论如何,你可以这样做:

def range(start, stop=None):
    if stop is None: # only one arg, treat stop as start ...
        stop = start
        start = 0
    ...
Run Code Online (Sandbox Code Playgroud)

并相应地记录功能.