Python|yieldで関数を高速化する

Python
田中太郎
田中太郎

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を使用して関数を高速化しました

コメント

タイトルとURLをコピーしました