#バージョン
Pythonは3.6.0をつかっています.
stop_watch.py
にて
print(f"{func.__name__}は{elapsed_time}秒かかりました")
という処理を用いていますが,この記法は3.6.0以上でないと動きません.
自身のバージョンに合わせて適宜書き換えてください.
なお,他の部分に関しては,未確認ですが,3xなら動くと思います.
#関連記事
Pythonで時間をはかるには,基本的には,以下の記事の方法を用います.
【Python】処理にかかる時間を計測して表示
python > 処理時間計測 > time.time() - start_time
pythonでメソッドの処理時間を計測する関数
上記の方法でも,時間は計れます.
しかし,書きたいロジックと時間の計測が一緒になっています.
そこで,ロジックと時間の計測を完全に分離する冴えた方法があるので, 共有します.
#時間を計測する処理
from functools import wraps
import time
def stop_watch(func) :
@wraps(func)
def wrapper(*args, **kargs) :
start = time.time()
result = func(*args,**kargs)
elapsed_time = time.time() - start
print(f"{func.__name__}は{elapsed_time}秒かかりました")
return result
return wrapper
上記のコードが時間を計測する処理です.
このコードにはデコレータを用いています.
func
に実際の処理をstart
に計測開始時間をelaspsed_time
に処理に掛かった時間を格納しています.
デコレータについて,詳しく知りたい方は,こちらの記事に詳しく書いてくださっています.
Pythonのデコレータを理解するための12Step
#実際の使い方
from stop_watch import stop_watch
@stop_watch
def func() :
j=0
for i in range(99999999) :
j+=i
print(j)
func()
実際の使い方は,このようにします.
時間を計測したい関数の上に,@stop_watch
と書いて上げるだけです.
(*なお,同一ディレクトリ(フォルダ)に上記のstop_watch.py
と以下のtest.py
があるという前提です.違う場合は,適宜インポート処理を書き換えてください)
結果は,
4999999850000001
funcは6.330682277679443秒かかりました
のように表示されます.
1行目に時間を計測したい関数の結果が表示されます.
2行目に時間を計測したい関数の名前と,その関数の実行に掛かった時間が表示されます.
#雑感
ロジックと関係ないけど,何か結果が見たい場合,デコレータが輝くと思います.
今回は,時間の計測というタスクでした.
何かのお役に立てばなと思います.