<p>我在读这个<a href="http://handyfloss.wordpress.com/2008/02/17/summary-of-my-python-optimization-adventures/" rel="noreferrer">post</a>的时候,发现一个代码是:</p>
<pre><code>jokes=range(1000000)
domain=[(0,(len(jokes)*2)-i-1) for i in range(0,len(jokes)*2)]
</code></pre>
<p>我想,在列表理解之外计算len(笑话)的值不是更好吗?</p>
<p>好吧,我试过了,计时了三个代码</p>
<pre><code>jv@Pioneer:~$ python -m timeit -s 'jokes=range(1000000);domain=[(0,(len(jokes)*2)-i-1) for i in range(0,len(jokes)*2)]'
10000000 loops, best of 3: 0.0352 usec per loop
jv@Pioneer:~$ python -m timeit -s 'jokes=range(1000000);l=len(jokes);domain=[(0,(l*2)-i-1) for i in range(0,l*2)]'
10000000 loops, best of 3: 0.0343 usec per loop
jv@Pioneer:~$ python -m timeit -s 'jokes=range(1000000);l=len(jokes)*2;domain=[(0,l-i-1) for i in range(0,l)]'
10000000 loops, best of 3: 0.0333 usec per loop
</code></pre>
<p>观察第一个和第二个之间2.55%的边际差异使我认为-是第一个列表理解</p>
<pre><code>domain=[(0,(len(jokes)*2)-i-1) for i in range(0,len(jokes)*2)]
</code></pre>
<p>由python内部优化?或者2.55%是足够大的优化(假设len(笑话)=1000000)?</p>
<p>如果这是-Python中的其他隐式/内部优化是什么?</p>
<p>什么是<code>developer's rules of thumb for optimization in Python</code>?</p>
<p><strong>Edit1</strong>:由于大多数答案都是“不优化,如果速度慢,请稍后再做”,我从<code>Triptych</code>和<code>Ali A</code>获得了一些提示和链接。
我会把问题改一点,并要求不要这样做。</p>
<p>我们能从那些面临“慢”的人那里得到一些经验吗?问题是什么?是如何解决的?</p>
<p><strong>Edit2</strong>:对于那些还没有到这里的人来说,是一个<a href="http://www.python.org/doc/essays/list2str/" rel="noreferrer">interesting read</a></p>
<p><strong>Edit3:</strong>有关<code>timeit</code>的不正确用法,请参见<strong>dF的</strong>正确用法的答案,以及三个代码的计时。</p>