Python timeitモジュールの使用実践


Python内のtimeitモジュールは、変数割当文の実行時間、関数の実行時間など、一定のコードの実行時間をテストするために使用できます。
timeitモジュールはPython標準ライブラリのモジュールです。インストールする必要がなく、直接導入すれば使用できます。導入時に直接import timeitを使ってもいいです。 timeit()関数とrepeat()関数、そして Timer類from timeit importを使用する場合は、Timer類のみを導入することができます。all_制限する。
timeitモジュールのソースコードは全部で300行しかありません。主に上の二つの関数と一つの種類を実現します。自分で見てもいいです。
続いて、timeitモジュールを使ってコードの実行時間をテストします。Pythonリストを使ってヘッダからデータを追加して、テールからデータを追加する実行時間を比較します。
一、timeit()関数を使って運転時間をテストします。
1.試験関数の準備
まず二つの関数を書きます。一つの関数はリストの先頭からデータを追加します。もう一つの関数はリストの最後からデータを追加します。

# coding=utf-8
def insert_time_test():
  insert_list = list()
  for i in range(10):
    insert_list.insert(0, i)
def append_time_test():
  append_list = list()
  for i in range(10):
    append_list.append(i)
if __name__ == '__main__':
  import timeit
2. timeit(stmt=「pass」、setup=「pass」、timer=default_timer,number=default_number関数の紹介
timeit()関数には4つのパラメータがあります。各パラメータはキーワードパラメータです。標準値があります。
stmt:着信にはテスト時間が必要なコードがあります。コード表現式や単一変数に直接入ってもいいし、関数に入ってもいいです。関数に入るときは、関数名の後ろに括弧を付けて、stmt="func(")のように関数に実行させます。  。
setup:stmtに使用されるパラメータ、変数、導入されるモジュールなど、stmtに導入される動作環境mainひゅうimport func一行の文を書いてもいいし、複数の行の文を書いてもいいし、複数の行の文を書くときはセミコロンで区切ってもいいです。
stmtとパラメータセットのパラメータが値を伝えないとテストの意味がなくなりますので、この二つのパラメータが必要です。
timer:timerパラメータは現在のオペレーティングシステムの基本的な単位で、デフォルトは現在のオペレーティングシステムによって自動的に取得されます(ソースは既に定義されています)。
number:テストするコードの運行回数は、デフォルトでは1000万回(百万回)で、時間がかかるコードに対して、何度も実行すると時間がかかります。運転回数は自分で変更できます。
3.試験関数の運転時間
今使います 上の2つの関数の運転時間をテストします。

  insert_time_timeit = timeit.timeit(stmt='insert_time_test()', 
                    setup='from __main__ import insert_time_test')
  print('insert_time_timeit: ', insert_time_timeit)
  append_time_timeit = timeit.timeit(stmt='append_time_test()', 
                    setup='from __main__ import append_time_test')
  print('append_time_timeit: ', append_time_timeit)
実行結果:
('insert_time_timeit:',2.9112871)
('apped_time_timeit:',1.88841249998)
リストの先頭にデータを追加する時間は、リストの末尾にデータを追加する時間より長いことが分かる。
4.テストコード(式)の実行時間
引き続き使用します timeit()は上のコードの運転時間をテストします。ただし、今回は直接にパラメータにコードを入れます。着信関数ではありません。

  insert_time_timeit = timeit.timeit(stmt='list(insert_list.insert(0, i) for i in init_list)',
                    setup='insert_list=list();init_list=range(10)',
                    number=100000)
  print('insert_time_timeit: ', insert_time_timeit)
  append_time_timeit = timeit.timeit(stmt='list(append_list.append(i) for i in init_list)',
                    setup='append_list=list();init_list=range(10)',
                    number=100000)
  print('append_time_timeit: ', append_time_timeit)
長い間、コードの中でわざわざnumberを百万回から十万回に変えました。運転結果は以下の通りです。

('insert_time_timeit: ', 330.46189400000003)
('append_time_timeit: ', 0.21436310000001413)
対照的に、同じ動作に対しては、関数を使用する動作時間は、直接コード表式に入る時間よりも遥かに少なく、特にヘッド挿入データの方が顕著である。
二、repeat()関数を使って運行時間をテストします。
1. repeat(stmt=「pass」、setup=「pass」、timer=default_timer,repeat=default_repeat、number=default_number関数の紹介
repeat()関数は5つのパラメータがあります。各パラメータはキーワードパラメータです。標準値があります。比較 timeit()関数としては、timeit()関数にあるパラメータrepeat()関数があります。また、repeat()関数が一つ多くなりました。 repeatパラメータ。
repeat:テストを何回繰り返すかを表します。同じパラメータのtimeit関数を繰り返し実行すると理解できます。最終的な結果は1つのリストを構成して戻ります。repeatはデフォルトで3回です。
2.試験関数の運転時間
今使います 上の2つの関数の動作時間をテストします。

 insert_time_repeat = timeit.repeat(stmt='insert_time_test()',
                    setup='from __main__ import insert_time_test')
  print('insert_time_repeat: ', insert_time_repeat)
  append_time_repeat = timeit.repeat(stmt='append_time_test()',
                    setup='from __main__ import append_time_test')

  print('append_time_repeat: ', append_time_repeat)
運転結果は以下の通りです。

('insert_time_repeat: ', [2.7707739, 2.908885, 2.7164823999999994])
('append_time_repeat: ', [1.7458063, 1.777368000000001, 1.8675014999999995])
3.テストコード(式)の実行時間
引き続き使用します repeat()は上のコードの運行時間をテストして、直接コードに入ってきて、上でnumberを10万回に変えた後に、時間はまだとても長いです(300数秒)ので、numberを減らし続けて、1万回に変えます。

  insert_time_repeat = timeit.repeat(stmt='list(insert_list.insert(0, i) for i in init_list)',
                    setup='insert_list=list();init_list=range(10)',
                    repeat=5,
                    number=10000)
  print('insert_time_repeat: ', insert_time_repeat)
  append_time_repeat = timeit.repeat(stmt='list(append_list.append(i) for i in init_list)',
                    setup='append_list=list();init_list=range(10)',
                    repeat=5,
                    number=10000)
  print('append_time_repeat: ', append_time_repeat)
運転結果は以下の通りです。

('insert_time_repeat: ', [2.591015, 2.5814996999999997, 2.5547322, 2.6153070000000005, 2.5496864000000006])
('append_time_repeat: ', [0.0181692999999985, 0.01746889999999901, 0.018901899999999472, 0.018737400000000903, 0.018211900000000725])
三、Timerを使う クラス試験運転時間
1. Timer類の紹介
上にはtimeit()関数とrepeat()関数が使われていますが、timeitモジュールでは、これらの関数はTimer類に対してさらにパッケージ化されています。実際に呼び出したのはTimer類の方法です。
Timerクラスでは、2つの方法、timeit()方法とrepeat()方法が実現され、上の2つの関数が呼び出されるのがこの2つの方法です。
使用中  from timeit import…の場合、Timer類しか導入できませんので、直接Timer類を使ってテストすることができます。
2.テストリストのヘッダ追加
先にTimer類のオブジェクトを実例化して、stmtとsetupパラメータ(パラメータの意味は上記と一致)に導入し、timerパラメータはデフォルトを維持して、インスタンスオブジェクトを通じて対応するtimeit()方法またはrepeat()方法を呼び出して、timeit()方法でnumberに導入し、repeat()方法でnumberとnumberに導入する。 repeat
使用 timeit()の方法と repeat()メソッドは、ヘッダからデータを追加する運転時間をテストします。

 timer_insert = timeit.Timer(stmt='insert_time_test()', setup='from __main__ import insert_time_test')
  insert_time_timeit = timer_insert.timeit(number=1000000)
  print('insert_time_timeit: ', insert_time_timeit)
  insert_time_repeat = timer_insert.repeat(number=1000000)
  print('insert_time_repeat: ', insert_time_repeat)
運転結果は以下の通りです。

('insert_time_timeit: ', 2.7732486)
('insert_time_repeat: ', [2.7367806999999997, 2.707402600000001, 2.7288245999999994])
3.テストリストの末尾に追加する
使用 timeit()の方法と repeat()メソッドは、末尾からデータを追加する運転時間をテストします。

  timer_append = timeit.Timer(stmt='append_time_test()', setup='from __main__ import append_time_test')
  append_time_timeit = timer_append.timeit(number=1000000)
  print('append_time_timeit: ', append_time_timeit)
  append_time_repeat = timer_append.repeat(number=1000000)
  print('append_time_repeat: ', append_time_repeat)
運転結果は以下の通りです。

('append_time_timeit: ', 1.9966106000000001)
('append_time_repeat: ', [1.9523343999999998, 1.8373857999999998, 1.8695377000000004])
timeitモジュールは比較的簡単なモジュールです。使い方はこれぐらいです。
締め括りをつける
以上は小编が绍介したPython timeitモジュールの使用実践です。皆さんのために役に立つことを望んでいます。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。