timeit模块挂起了更大的pow()值

时间:2010-06-29 09:57:52

标签: python timeit

我正在尝试计算pow函数计算指数模数所用的时间。使用g,x,p的值进行硬编码时,代码会产生错误,并且使用pow函数中的值,代码会挂起。当我使用time()和clock()来计算这段代码所花费的时间时,同一条代码正在有效地工作。 我想要准确性,现在我已经在使用clock()和time()函数测试后转移到timeit模块。

代码适用于较小的值,如pow(2,3,5),这是有道理的。如何使用timeit模块提高计算时间的效率。

我也是python的初学者,如果代码中有任何愚蠢的错误,请原谅我。

import math
import random
import hashlib
import time
from timeit import Timer

g = 141802876407053547664378835005750805370737584038368838959151050908654130616798415530564917923311706921535439557793280725844349256960807398107370211978304
x = 1207729835787890214
p = 4870352607375058055471602136317178172283784073796673298937466544646468718314482464390112574915498953621226853454222898392076852427324057496200810018794472


t = Timer('pow(g,x,p)', 'import math')

z = t.timeit()
print ('the value of z is: '), z

由于

1 个答案:

答案 0 :(得分:4)

这里有两个问题:

  1. 您无法直接从timeit访问全局变量:请参阅this question。您可以使用它来修复错误:

    t = Timer('pow(g,x,p)', 'from __main__ import g,x,p')
    

    或者只是将数值直接放在字符串中。

  2. 默认情况下,timeit模块运行1000000次迭代,这将花费太长时间。您可以更改迭代次数,例如:

    z = t.timeit(1000)
    

    这可以防止看似挂起的事情(但实际上只是一个很长的计算)。