擅长:python、mysql、java
<p><code>range()</code>接受一个位置参数和两个可选参数,<em>根据传入的参数数量对这些参数进行不同的解释。</p>
<p>如果只传入了<em>一个</em>参数,则假定它是<code>stop</code>参数,否则第一个参数将被解释为start。</p>
<p>实际上,<code>range()</code>,<a href="https://github.com/python/cpython/blob/44467e8ea4cea390b0718702291b4cfe8ddd67ed/Objects/rangeobject.c#L71-L122" rel="nofollow noreferrer">coded in C</a>接受的参数数目是可变的。你可以这样模仿:</p>
<pre><code>def foo(*params):
if 3 < len(params) < 1:
raise ValueError('foo takes 1 - 3 arguments')
elif len(params) == 1
b = params[0]
elif:
a, b = params[:2]
c = params[2] if len(params) > 2 else 1
</code></pre>
<p>但你也可以交换参数:</p>
<pre><code>def range(start, stop=None, step=1):
if stop is None:
start, stop = 0, start
</code></pre>