1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iteratorにシグナルを紛れ込ませること(Python)

Last updated at Posted at 2021-03-02

概要

iteratorにシグナルを紛れ込ませて、適切なタイミングでアクションをしたい。

カスタムクラスを使って実装する。

内容

環境

macOS Catalina
Python 3.7.0

実演

勝手なclassを自分で定義して用いる。isで判定。

class OreShikaTsukawan:
    pass


def myiterator():
    for i in range(1000):
        yield i
        if i % 10 == 5:
            yield OreShikaTsukawan


for value in myiterator():
    if value is OreShikaTsukawan:
        print('finish signal!')
        break
    print(value)
output
0
1
2
3
4
5
finish signal!

こうすれば、本来のiteratorの中身とかぶる心配はない。
変な演算をしてしまう心配も少ない。

蛇足

可能ならばclass in classとかすれば、global変数を汚さずに済む。

追記:
自分以外そんなに使っていないだろうと思っていたら、似たような他の例を見つけた。

Lib/functools.py
    sentinel = object()          # unique object used to signal cache misses

iteratorではなく、辞書のKeyが存在するかどうかに用いられている。

参考にさせていただいた本・頁

特になし

感想

たまに便利。

今後

同僚に驚かれなければ使っていく。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?