【发布时间】:2011-05-07 11:17:15
【问题描述】:
在 Python 中,我理解默认参数位于末尾,非默认参数不能跟随默认参数。没事儿。比如:
>>> def foo(x=0, y):
return x, y
SyntaxError: non-default argument follows default argument
正如预期的那样。
但是,如果我希望 第一个参数应该是默认参数,情况会怎样?例如,从上面的代码中可以看出,x 必须是第一个参数,并且它的默认值应该是 0。
可以这样做吗?我问是因为即使在range 函数中,我猜它也是这样的:
def range(start=0, end):
pass
那么这是如何做到的,如果不可能,range 是如何实现的呢?请注意,我坚持将第一个参数设为默认值,这就是重点。我以range 为例,因为它非常适合我的问题。当然可以将range 实现为def range(end, start=0),但这不是重点。
【问题讨论】:
-
如你所知,真正的答案是
range是一个 C 函数,由于某种原因它没有与 python 相同的规则(很高兴知道为什么)。人们可能会因为我的建议而讨厌我,但我之所以这样做是为了范围,因为我对事物的顺序有一个糟糕的记忆。 Imo 这应该不是问题,所以我正在修复它:range(*{'start':0,'stop':10,'step':2}.values())