I am Charmie

メモとログ

iteratorとgenerator

  • generatorは yield 使うやつ?
  • listとかで呼び出すときに,必要な要素だけ返すからメモリ効率が悪くならない

  • ジェネレータクラスから作ったイテレータ生成オブジェクトは何度もループで使える

  • ジェネレータ関数で生成したオブジェクトはループで回せるのは一回
class MyIteratorClass(object):
    def __init__(self):
        pass
    
    def __iter__(self):
        # do something
        if satisfy_end_condition:
            raise StopIteration()
        yield some_value

my_iterator = MyIteratorClass()

# 同じ内容のprintが2回出力
for n in my_iterator():
    print(iterator)

for n in my_iterator():
    print(iterator)
def MyIteratorFunction():
    # do something
    if satisfy_end_condition:
        raise StopIteration()
    yield some_value

my_iterator = MyIteratorFunction()

# 2回目のforループでは何も出力されない
for n in my_iterator():
    print(iterator)

for n in my_iterator():
    print(iterator)