【Python学習用(初学者向け)】generator ジェネレーター

pythonPython

今回の記事では、

Python Generator ジェネレーター

について解説をしていきます

こんな方は必見です
  • Pythonを学び始めたばかりで、generator ジェネレーターとは何かわからない!
  • 聞いたことはあるけど、使ったことがない。そもそもいいことあるの?!
この記事でわかること
  1. generatorの基本、作り方
  2. generatorのメリット

まずはメリットから!

設定

wreslerというオブジェクトにid、name、colorを格納

そのwreslerオブジェクトを1,000万セット作ります

その作成時間(処理時間)を測ってみましょう

リストで作成する

import time,random
colors = ["red", "blue", "yellow", "green", "purple", "pink"]
names = ["tanhashi", "naito", "nakamura", "evil", "okada"]

def wresler_dict(count):
    for i in range(count):
        wresler = {
            "id": i,
            "name": random.choice(names),
            "color": random.choice(colors)
        }
    return wresler

t0 = time.time()
wreslers = wresler_dict(10000000)
t1 = time.time()
print(t0)
print(t1)

【出力結果】

1614351886.980727
1614351894.778379

約8秒

結構かかってますね

generatorで作成

import time,random
colors = ["red", "blue", "yellow", "green", "purple", "pink"]
names = ["tanhashi", "naito", "nakamura", "evil", "okada"]

def wresler_gen(count):
    for i in range(count):
        wresler = {
            "id": i,
            "name": random.choice(names),
            "color": random.choice(colors)
        }
    yield wresler

t0 = time.time()
wreslers = wresler_gen(10000000)
t1 = time.time()
print(t0)
print(t1)

【出力結果】

1614351947.8435166
1614351947.843557

1秒とかかっていません

あっという間ですね!

generator作成方法

return

を、

yield

に変える!

以上!!!

generator 補足説明

generator をprint出力すると、

<generator object square_gen at 0x7f84815a74a0>

こんな感じになります

上記のように、for loopではなく数字を取り出すには、

next()

を使います

実例

def square_gen(nums):
    for i in nums:
        yield i*i
        
nums = square_gen([1,2,3,4,5,6])
print(next(nums))
print(next(nums))
print(next(nums))

【出力結果】

1
4
9

next()毎に一つずつ

順番に値が取り出されていくのがわかります

まとめ

generatorについてのメリットは何よりも、

処理がとても早い!

のがわかりますね!

私自身、リストしか知らないときは、for loopで処理をする時などもいちいちリストにしていたのですが、

generatorにすることで処理が格段に早くなりました

リストとジェネレーターを是非場面によって使い分けてみてください!

本日は以上となります

本日もありがとうございました!!

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