<blockquote>
<p>First, isn't the line for ID simply the identity matrix? </p>
</blockquote>
<p>是的。在</p>
<blockquote>
<p>Second, I can't really understand the line for row....</p>
</blockquote>
<p><a href="https://stackoverflow.com/questions/18296755/python-max-function-using-key-and-lambda-expression">See this</a>有关max/key/lambda交互的讨论。回答“什么是<code>i</code>?”,它是lambda函数的参数,<code>i</code>可以等效为<code>x</code>对于<code>foo</code>。(为清楚起见,分别生成<code>abs(m[x][j])</code>和{<cd6>})。在</p>
<blockquote>
<p>And isn't xrange similar to range? </p>
</blockquote>
<p>是的。在python2中,<code>xrange</code>返回一个sequence对象,该对象只在需要时才延迟地计算下一个值。<a href="https://stackoverflow.com/questions/94935/what-is-the-difference-between-range-and-xrange-functions-in-python-2-x">See this for more info</a>。当整个循环时,<code>range</code>和{<cd7>}将使用不同的实现产生相同的结果。在</p>
<blockquote>
<p>But what does it return here?</p>
</blockquote>
<p>第5行的<code>xrange(n)</code>将返回从0到(n-1)的整数值,而第6行的<code>xrange(j, n)</code>将返回从j到(n-1)的整数值。在</p>
<p><strong>编辑</strong></p>
<p>关于lambda的更多信息:</p>
<p>考虑一下如何取一个给定的数字序列,并将每个数字加倍。首先定义一个将一个数字<code>x</code>加倍并返回该值的函数。然后将该函数映射到序列的每个元素。在</p>
<pre><code># Traditional
def double(x): return x*2
print map(double, [1,2,3,4]) # [2, 4, 6, 8]
</code></pre>
<p>您也可以使用匿名(lambda)函数来执行相同的操作:</p>
^{pr2}$
<p>请注意,除了<code>double</code>函数的定义不存在外,对<code>map</code>的调用中对函数的引用被“inline”lambda函数代替。在</p>
<p><strong>编辑2</strong></p>
<blockquote>
<p>And when combined with the function max, what happens?</p>
</blockquote>
<p>这一行<code>row = max(xrange(j, n), key=lambda i: abs(m[i][j]))</code>可以分解如下:</p>
<ul>
<li><code>xrange(j,n)</code>生成从<code>j</code>(包含)到<code>n</code>(排他)的整数序列。在</li>
<li>然后,这些整数中的每一个都作为参数“传递”给键参数中的函数。换句话说,它们在lambda函数中被用作<code>i</code>。lambda函数“返回”第<code>i</code>行和第<code>j</code>列的绝对值。[1]</li>
<li>然后,<code>max</code>函数会找到这些“lambda outputs”的最大值,并将<code>row</code>设置为该值。在</li>
</ul>
<p>也可以将其作为列表理解的最大值:</p>
<pre><code>row = max( [abs(m[i][j]) for i in xrange(j,n)] )
</code></pre>
<p>或者正如<a href="https://stackoverflow.com/users/388787/dan-d">Dan D.</a>在他的评论中指出的,作为生成器表达式编写(不创建中介列表)如下:</p>
<pre><code>row = max( abs(m[i][j]) for i in xrange(j,n) )
</code></pre>
<p>注意事项:</p>
<p>[1]这里有一些假设,但是行列是表示矩阵的标准方式。在</p>