ホームページ  >  記事  >  バックエンド開発  >  Pythonジェネレーターの使い方

Pythonジェネレーターの使い方

WBOY
WBOYオリジナル
2016-06-16 08:46:101146ブラウズ

ジェネレーターとは何ですか?

ジェネレーターは、特別なキーワード yield を含む関数です。呼び出されると、ジェネレーター関数はジェネレーターを返します。 send、throw、close メソッドを使用すると、ジェネレーターが外部と対話できるようになります。

ジェネレーターはイテレーターでもありますが、単なるイテレーターではなく、next メソッドがあり、イテレーターとまったく同じように動作します。したがって、ジェネレーターは Python ループでも使用できます。

発電機の使い方は?

まず例を見てみましょう:

コードをコピー コードは次のとおりです:

#!/usr/bin/python
# -*-コーディング: utf -8 -*-

def flatten(nested):
ネストされたサブリストの場合:
サブリストの要素の場合:
yield element

ネスト = [[1,2],[3,4],[5,6]]

フラット化 (ネスト) の num:
print num,

結果は 1、2、3、4、5、6 です

再帰ジェネレーター:

コードをコピー コードは次のとおりです:

#!/usr/bin/python
# -*-コーディング: utf -8 -*-

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

ジェネレーターの本質を見てみましょう

最初に見る:

コードをコピー コードは次のとおりです:

#!/usr/bin/python
# -*-コーディング: utf -8 -*-

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!')

結果は次のとおりです。

コードをコピーしますコードは次のとおりです。


42
こんにちは、世界!

次のことがわかります:
1) ジェネレーターは関数です
2) ジェネレーターには次のメソッドがあります
3) ジェネレーターは send メソッドを使用して外部と対話できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。