<p>本教程给出的答案是正确的,它们是<em>位置<strong>和<em>关键字参数。考虑下面的例子:</P>
<pre class="lang-py prettyprint-override"><code>>>> def f(a,b):
print(a)
>>> f(2,3)
2
>>> f(b=3, a=2)
2
</code></pre>
<p>从<a href="https://docs.python.org/3/glossary.html#term-parameter" rel="nofollow noreferrer">Python Glossary (parameter)</a>开始:</p>
<blockquote>
<p>A named entity in a function (or method) definition that specifies an argument (or in some cases, arguments) that the function can accept. There are five kinds of parameter:</p>
<ul>
<li><p>positional-or-keyword: specifies an argument that can be passed either positionally or as a keyword argument. This is the default kind of parameter, for example foo and bar in the following:</p>
<p><code>def func(foo, bar=None): ...</code></p>
</li>
<li><p>positional-only: specifies an argument that can be supplied only by position. Python has no syntax for defining positional-only parameters. However, some built-in functions have positional-only parameters (e.g. abs()).</p>
</li>
<li><p>keyword-only: specifies an argument that can be supplied only by keyword. Keyword-only parameters can be defined by including a single var-positional parameter or bare <code>*</code> in the parameter list of the function definition before them, for example kw_only1 and kw_only2 in the following:</p>
<p><code>def func(arg, *, kw_only1, kw_only2): ...</code></p>
</li>
</ul>
</blockquote>
<p>从另一个意义上说,“位置”也总是正确的,因为关键字参数是作为“幕后”位置参数计算的。从<a href="https://docs.python.org/3/reference/expressions.html#calls" rel="nofollow noreferrer">Python language reference (Calls)</a>开始:</p>
<blockquote>
<p>If keyword arguments are present, they are first converted to positional arguments, as follows [...]</p>
</blockquote>
<p>同样的<a href="https://docs.python.org/3/reference/expressions.html#calls" rel="nofollow noreferrer">docs</a>也给出了位置参数而非关键字参数的示例:</p>
<blockquote>
<p><strong>CPython implementation detail:</strong> An implementation may provide built-in functions whose positional parameters do not have names, even if they are ‘named’ for the purpose of documentation, and which therefore cannot be supplied by keyword. In CPython, this is the case for functions implemented in C that use <code>PyArg_ParseTuple()</code> to parse their arguments.</p>
</blockquote>