0. 既存の方法
import time
def sync_func():
for i in range(10):
time.sleep(0.5)
print(i)
start = time.time()
sync_func()
end=time.time()
print(end-start)
result
0
1
2
3
4
5
6
7
8
9
5.009452819824219
1. 提案の方法
Pythonには、デコレータという機能があり、関数の前後に特定の処理を追加できます。これを使用して、関数の実行時間を計測するデコレータを定義することができます。
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("Elapsed time: ", end_time - start_time, "seconds")
return result
return wrapper
@timer
def sync_func():
for i in range(10):
time.sleep(0.5)
print(i)
sync_func()
result
0
1
2
3
4
5
6
7
8
9
Elapsed time: 5.0100860595703125 seconds
この例では、timerデコレータを定義し、my_function()関数に適用しています。timerデコレータは、wrapper関数を返します。wrapper関数は、my_function()関数を実行する前に開始時間を取得し、関数の実行が完了した後に終了時間を取得し、経過時間を表示します。最後に、wrapper関数はmy_function()関数の戻り値を返します。
デコレータを使用することで、関数を実行するたびに計測するコードを書く必要がなくなり、コードも短くなります。ただし、デコレータを理解していない人にとっては、読みやすさが低下する可能性があります。