【发布时间】:2013-10-13 19:00:20
【问题描述】:
下面的程序(在函数prime里面)的运行时间是110.726383227秒
如果我运行相同的程序而不将它包装在一个函数(素数)中,它的运行时间是 222.006502634 秒
通过将其包装在一个函数中,我显着提高了性能。
还有没有可能提高这个程序的效率?
# This is a program to find sum of prime numbers till 2 billion
def prime():
import time
start_time = time.clock()
num = 2
j=1
tot_sum = 0
for num in xrange(2,2000000):
count = 0
for j in xrange(1,int(num**0.5)+1): # checking from 1 to sqrt(n)+1
if(num % j == 0):
count = count+1
if(count == 1):
tot_sum = tot_sum + num
print "total sum is %d" % tot_sum
print time.clock() - start_time, "seconds"
【问题讨论】:
-
使用
timeit模块来测试程序的时序而不是time.clock()。 -
@hcwhsa
timeit很棒,但如果单次运行需要几分钟时间,这是不切实际的。它专为小型 sn-ps 设计。并且使用timeit为单次跑步计时是没有用的(它使用更好的秒表,但在这个时间范围内几乎没有用处)。 -
我认为这是因为它只需要处理本地命名空间(STORE_FAST 指令),而不是本地和全局命名空间(STORE_NAME 指令)。本地命名空间使用寄存器,而全局命名空间将其名称和对象存储在 RAM 中。不过我可能是错的。
-
你可以用这样的技巧来调整这个程序的性能,但真正的罪魁祸首是基本算法。一个写得很好的素数筛应该几乎立即(当然不到一秒)产生高达 2000000 的素数。看stackoverflow.com/a/18049610/2192494
标签: python optimization python-2.7 performance