<p>首先,向函数中添加一个具有默认值的参数:</p>
<pre><code>def pop(self, item=None):
</code></pre>
<p>现在,在代码<code>if item is None:</code>中,可以执行“no param”操作;否则,使用<code>item</code>。你是想在逻辑的顶端切换,还是向下切换,这取决于你的逻辑。在本例中,<code>item is None</code>可能意味着“匹配第一项”,因此您可能需要一个检查<code>item is None or current.data == item:</code>的单个循环。在</p>
<p>有时,您希望对一个可以合法地为<code>None</code>的参数执行此操作,在这种情况下,您需要选择一个不同的sentinel。关于不同选择的利弊,这里有几个问题(其他地方也有博客文章)。但有一种方法:</p>
^{pr2}$
<p>除非有人使用LinkedList的私有<code>_sentinel</code>类成员作为列表项是有效的,否则这是有效的。(如果这个<em>是有效的,例如,因为您要用这些东西构建一个调试器,那么您必须变得更加棘手。)</p>
<p>这方面的术语有点棘手。引用文件:</p>
<blockquote>
<p>When one or more top-level parameters have the form <code>parameter = expression</code>, the function is said to have “default parameter values.”</p>
</blockquote>
<p>要理解这一点:“Parameters”(或“formal Parameters”)是函数定义要接受的东西;“arguments”是在调用表达式中传递给函数的东西;“parameter values”(或“actual Parameters”,但这只会让事情更混乱)是函数体接收的值。所以,在技术上说“默认参数”或“带默认参数的参数”都是不正确的,但两者都很常见,因为即使是专家也觉得这很令人困惑。(如果您很好奇,或者只是还不困惑,请参阅参考文档中的<a href="http://docs.python.org/reference/compound_stmts.html#function-definitions" rel="nofollow">function definitions</a>和{a2}以获取完整的详细信息。)</p>