10

次のコードの実行速度を測定したいと思います。

def pe1():
    l = []
    for i in range(1000):
        if i%3 == 0 or i%5 == 0:
            l.append(i)
    print sum(l)

このコードを pe1m.py に保存しました。ここで、Python インタープリターを使用してファイルの速度をテストしたいと思います。やった:

import timeit
import pe1m

t = timeit.Timer(stmt = 'pe1m.pe1()')
t.timeit()

しかし、私は得る:

File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/timeit.py", line 195, in timeit
    timing = self.inner(it, self.timer)
  File "<timeit-src>", line 6, in inner
NameError: global name 'pe1m' is not defined

しかし、グローバル変数はありません。

4

2 に答える 2

17

これを試して:

t = timeit.Timer(stmt='pe1()', setup='from pe1m import pe1')

timeit.Timerオブジェクトは、それを呼び出している名前空間を知らないため、pe1mインポートしたモジュールにアクセスできません。

setup引数は、時限ステートメントのコンテキストで実行されるステートメントです。それらは同じ名前空間を共有するため、そこで定義したものは何でも .xml でアクセスできますstmt

于 2012-04-12T22:22:45.493 に答える