田中太郎
yieldを使用してfor文処理がある関数を高速化します
yieldの使い方
func1()で0~cnt_maxまでのリストを作成して足し合わせる単純なコードです
def func1(cnt_max):
return [i for i in range(cnt_max)]
def main1():
cnt = 0
for i in func1(10):
cnt += i
return cnt
print(main1())
# 出力
# 45
上記のコードをyieldを使って書き換えます
def func2(cnt_max):
for i in range(cnt_max):
yield i
def main2(cnt_max):
cnt = 0
for i in func2(cnt_max):
cnt += i
return cnt
print(main2(10))
# 出力
# 45
実行時間を比較する
yieldを使う場合と使わない場合の実行時間を比較します
青線がyieldを使用しない場合、橙線がyieldを使用した場合です
繰り返しの数を変化させていき、両者の実行時間を計測しました
注)5回計測して、その平均をとっています
上記のグラフを確認すると、yieldを使用することで高速化できています
まとめ
yieldを使用して関数を高速化しました
コメント