October 2023
Intermediate to advanced
336 pages
4h 31m
Japanese
ジェネレータ関数はPythonの最も興味深く、強力な機能の1つです。ジェネレータは新たなイテレータパターンを定義する便利な方法として紹介されることが多いのですが、ジェネレータの機能はそれだけではありません。ジェネレータは関数の実行モデル全体を根本的に変える力があります。この章では、ジェネレータ、ジェネレータの委譲、ジェネレータベースのコルーチン、そしてジェネレータの応用例について説明します。
関数内でyield文を使うと、その関数はジェネレータとなります。ジェネレータは主に値のシーケンスの生成に使われます。以下はジェネレータの例です。
def countdown(n):
print("Counting down from", n)
while n > 0:
yield n
n -= 1
# 使用例
for x in countdown(10):
print("T-minus", x)
上で定義した関数countdown()をただ単に呼び出してもイテレートされません。
>>> c = countdown(10) >>> c <generator object countdown at 0x105f73740>
関数は実行されませんが、ジェネレータオブジェクトが生成されます。ジェネレータオブジェクトではイテレートを開始した場合のみ関数が実行されます。ジェネレータオブジェクトに対してnext()を呼び出すことでもジェネレータは開始します。
>>> next(c) Counting down from 10 10 >>> next(c) 9
next()が呼ばれると、ジェネレータ関数はyield文に到達するまで文を実行します。 ...
Read now
Unlock full access