ジェネレーター内包表記
まず最初にジェネレーターを書きます。
def g(): for i in range(10): yield i
0から9の数字をループ出力するジェネレーター g() を定義しています。
g() の型(type) を見てみます。
g = g() print(type(g)) <class 'generator'>
ジェネレーター型と返ってきますね。
next()を使い5回出力してみます。
def g(): for i in range(10): yield i print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g))
0から4まで出力されます。
0 1 2 3 4
内包表記
これを内包表記を使って書いてみます。
g = (i for i in range(10))
def g():
for i in range(10):
yield i
g = g()
g = (i for i in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
結果はこうです。
0 1 2 3 4
出力されました。
if 分を入れる場合もこうです。
def g(): for i in range(10): yield i g = g() g = (i for i in range(10) if i % 2 == 0) for x in g: print(x)
結果は
0 2 4 6 8
注意
g = (i for i in range(10)) を一見すると g がタプルと見間違えしそうですが、注意しましょう。
タプルの場合は、tupleで括る必要があります。
g = tuple(i for i in range(10))
print(type(g))
<class 'tuple'>
コメント