擅长:python、mysql、java
<p>Python的名称解析方案有时被称为<code>LEGB</code>规则,这意味着当在函数中使用非限定名称时,Python最多搜索四个作用域-<strong>首先搜索局部(L)作用域,然后搜索任何封闭(E)<code>def</code>和<code>lambda</code>的局部作用域,然后搜索全局(G)作用域,最后是内置(B)范围。(请注意,它将在找到匹配项后立即停止搜索)</p>
<p>因此,当您在函数内部使用<code>sorted</code>时,解释器将其视为一个<strong>全局</strong>名称(您的函数名称),因此您将拥有一个递归函数。如果您想访问内置的<code>sorted</code>,您需要为Python指定它。通过<code>__builtin__</code>模块(<strong>在Python-2.x中</strong>)和<a href="https://docs.python.org/3/library/builtins.html" rel="noreferrer">^{<cd7>}</a>在Python-3.x中(此模块提供对Python的所有“内置”标识符的直接访问)</p>
<hr/>
<p>python 2:</p>
<pre><code>import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())
</code></pre>
<p>python 3:</p>
<pre><code>import builtins
def sorted(services):
return builtins.sorted(services, key=lambda s: s.sortkey())
</code></pre>