Python ジェネレータのサンプル(generator)

Pythonのジェネレータのサンプルです。

確認環境
・Python 3.7.0

目次

ジェネレータの作り方

  • 1.ジェネレータとして使用する関数を作成します。
  • 2.その関数内にyield文を記述します。yield文は値を返します。それに加えて値を返したところを記憶していて次回は続きから行います。
  • 3.関数を変数に代入した後、next関数でその関数を呼び出します。
  • send関数を使用すると関数に値をセットすることができます。
  • Pythonの公式ドキュメントのジェネレータのリンクです。
    https://docs.python.org/ja/3/tutorial/classes.html#generators

ジェネレータのサンプル

ジェネレータのサンプルです。

# coding: utf-8

def test1():
		yield "a"
		yield "b"
		yield "c"

t1 = test1()

print(next(t1)) #a
print(next(t1)) #b
print(next(t1)) #c

3~6行目は、関数です。
8行目は、定義した関数を変数に代入しています。
10行目は、next関数でtest1関数を実行しています。4行目の値が表示されます。
11行目も同じnext関数ですが、今度は5行目の値が表示されます。
12行目は、6行目の値が表示されます。

while文を使用したサンプル

while文を使用したサンプルです。

# coding: utf-8

def test1(a):
	while a < 10:
		yield a
		a += 1

t1 = test1(0)

print(next(t1)) # 0
print(next(t1)) # 1
print(next(t1)) # 2

3~6行目は、関数です。
4~6行目は、while文です。値aが1づつ増加しますが、10より小さい間処理を繰り返します。
8行目は、定義した関数を変数に代入しています。
10行目は、next関数でt1関数を実行しています。0が表示されます。
11行目も同じnext関数ですが、今度は1が表示されます。
12行目は、2が表示されます。

sendメソッドを使用するサンプル

sendメソッドを使用するサンプルです。

# coding: utf-8

def test1(x):
	for a in range(10):
		b = yield ('Hello',x)
		if b is not None:
			x = b

t1 = test1("おはよう")

print(next(t1)) # ('Hello','おはよう')

t1.send("こんにちは")

print(next(t1)) # ('Hello','こんにちは')
print(next(t1)) # ('Hello','こんにちは')

6行目は、send関数のときにtrueになり7行目が実行されます。
11行目は、9行目の引数の値がセットされて表示されます。
13行目は、send関数です。引数の値を関数に渡します。
15,16行目は、13行目のsend関数でセットした値が表示されます。

関連の記事

Python 関数のサンプル
Python ローカル変数とグローバル変数
Python 無名関数のサンプル(lambda)
Python 内包表記のサンプル

△上に戻る