今回の記事では、
Python Generator ジェネレーター
について解説をしていきます
こんな方は必見です
- Pythonを学び始めたばかりで、generator ジェネレーターとは何かわからない!
- 聞いたことはあるけど、使ったことがない。そもそもいいことあるの?!
この記事でわかること
- generatorの基本、作り方
- 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にすることで処理が格段に早くなりました
リストとジェネレーターを是非場面によって使い分けてみてください!
本日は以上となります
本日もありがとうございました!!