ジェネレーターとは何ですか?
ジェネレーターは、特別なキーワード yield を含む関数です。呼び出されると、ジェネレーター関数はジェネレーターを返します。 send、throw、close メソッドを使用すると、ジェネレーターが外部と対話できるようになります。
ジェネレーターはイテレーターでもありますが、単なるイテレーターではなく、next メソッドがあり、イテレーターとまったく同じように動作します。したがって、ジェネレーターは Python ループでも使用できます。
発電機の使い方は?
まず例を見てみましょう:
def flatten(nested):
ネストされたサブリストの場合:
サブリストの要素の場合:
yield element
ネスト = [[1,2],[3,4],[5,6]]
フラット化 (ネスト) の num:
print num,
結果は 1、2、3、4、5、6 です
再帰ジェネレーター:
def flatten(nested):
try:
ネストされたサブリストの場合:
flatten(sublist) の要素の場合:
要素を生成
ただし、TypeError:
ネストされた生成
for num in flatten([[1,2,3],2,4,[5,[6],7]]):
print num
結果は次のようになります: 1 2 3 2 4 5 6 7
ジェネレーターの本質を見てみましょう
最初に見る:
def simple_generator():
yield 1
print simple_generator
defrepeater(value):
while True:
new = (yield value)
new が None でない場合: value = new
r =repeater(42)
print r.next()
print r.send('hello, world!')
結果は次のとおりです。
次のことがわかります:
1) ジェネレーターは関数です
2) ジェネレーターには次のメソッドがあります
3) ジェネレーターは send メソッドを使用して外部と対話できます。