44279


処理時間を調べたくて、実験的にネットでよく見かけるコードでテストをしてみたのですが、0秒となってうまくいきません。どう手直しすればよいのでしょうか？

[code]

    import time
    
    def main():
    
        start = time.time()
    
        i = 0
        for i in range(100000):
            i = i * 2
    
        end = time.time()
    
        print (end-start)
    
    if __name__ == '__main__':
            main()
    
[/code]

[出力結果]：0.0


CC BY-SA 4.0
2018-05-26T16:44:28.847
44278
2018-05-27T03:43:51.943
2018-05-26T22:02:39.920
19110
28644
question
python python3
プログラムの処理時間表示が0.0になる


処理がごく短時間で終わってしまうので、計測するには`time.time()`では精度が不十分なのかも知れません。  
代わりに`time.perf_counter()`を使ってみてはどうでしょうか。


CC BY-SA 4.0
2018-05-26T19:13:59.210
44279
2018-05-26T19:13:59.210
9464
44278
answer


time.time()は、システムによっては１秒より高い精度で時刻を提供するとは限らないとなっています。使用しているシステムでは、time.time()の精度が十分でないようです。

Python には、コードの実行時間を計測するモジュールに`timeit`があるのでそれを使ってみたらどうですか。今回のコードであれば以下のようになります。

[code]

    import timeit
    
    def main():
        i = 0
        for i in range(100000):
            i = i * 2
    
    if __name__ == '__main__':
        print(timeit.timeit('main()', number=1))
    
[/code]

Jupyter Notebook
を使用すると`%timeit`というマジックコマンドが使えて便利です。複数行になる場合は、`%%timeit`を使って以下のようにして計測できるので手軽に使えます。

[code]

    %%timeit
    i = 0
    for i in range(100000):
        i = i * 2
    
[/code]

なお、Jupyter Notebook をインストールするのが面倒な場合は、[Google
Colab](https://colab.research.google.com/) が無料で使えます。


CC BY-SA 4.0
2018-05-27T03:43:51.943
44283
2018-05-27T03:43:51.943
15171
44278
answer