擅长:python、mysql、java
<p>如果将对pow的调用替换为显式使用“**”求幂运算符,这可能是一个更具可读性的<em>小</em>:</p>
<pre><code>sum_of_squares=sum([(prefs[person1][item]-prefs[person2][item])**2
for item in prefs[person1] if item in prefs[person2]])
</code></pre>
<p>去掉一些不变量也有助于提高可读性:</p>
^{pr2}$
<p>最后,在Python的理解列表中,还可以去掉一个最新版本的表达式[,所以最终也不需要接受Python的sum:</p>
<pre><code>sum_of_squares=sum((p1_prefs[item]-p2_prefs[item])**2
for item in p1_prefs if item in p2_prefs)
</code></pre>
<p>现在看起来更直截了当了。在</p>
<p>具有讽刺意味的是,为了追求可读性,我们还进行了一些性能优化(两种通常互斥的努力):</p>
<ul>
<li>从循环中取出不变量</li>
<li>将函数调用pow替换为“**”运算符的内联求值</li>
<li>删除了不必要的列表结构</li>
</ul>
<p>这是伟大的语言还是什么?!在</p>