擅长:python、mysql、java
<p>答案很简单,Python处理所有对象,默认情况下没有<a href="http://en.wikipedia.org/wiki/Just-in-time_compilation">JIT</a>。因此,不要通过修改堆栈上的几个字节和优化代码的热点部分(即迭代)来提高效率——Python会与表示数字的富对象一起运行,而不是动态优化。</p>
<p>如果您在一个具有JIT(例如PyPy)的Python变体中尝试了这个方法,我保证您会看到一个巨大的不同。</p>
<p>一般的技巧是避免使用标准的Python进行计算成本非常高的操作(特别是在后端为来自多个客户机的请求提供服务时)。使用JIT的Java、C#、JavaScript等效率更高。</p>
<p>顺便说一句,如果你想用一种更像Python的方式来写你的例子,你可以这样做:</p>
<pre><code>from datetime import datetime
start_time = datetime.now()
max_number = 20
x = max_number
while True:
i = 2
while i <= max_number:
if x % i: break
i += 1
else:
# x was not divisible by 2...20
break
x += 1
print('number: %d' % x)
print('time elapsed: %d seconds' % (datetime.now() - start_time).seconds)
</code></pre>
<p>我在90秒内完成了上面的任务。它更快的原因在于看似愚蠢的事情,比如<code>x</code>比<code>start</code>短,我没有像以前那样频繁地分配变量,我依赖Python自己的控制结构,而不是变量检查来跳入/跳出循环。</p>