[Python] EX 01 イテレータ

matplotlibのソースコードを読んでデコレータの存在を知り、自分のスキルがまだまだであることを痛感しました。

Pythonのエキスパートを目指すべく、中級者向けの書籍である”エキスパートPythonプログラミング 改訂3版”を購入しました。

早速、書籍内でも高度な文法と位置付けられているイテレータの章を読んでみました。有限・無限の数値発生器として使えそうです。

最近プログラミング関連本はAmazonや大手ネット書店の電子書籍ではなく、出版社サイトなどからPDFで購入しています。コードのコピーや書き込みができるので学習用途ではこちらの方が便利です。

# 再利用できるイテレータ

from time import sleep

class CounterState:
    def __init__(self, step):
        self.step = step

    def __next__(self):
        # カウンタ値を1つずつ0まで減算する
        if self.step <= 0:
            raise StopIteration
        self.step -= 1
        return self.step

class CountDown:
    def __init__(self, steps):
        self.steps = steps

    def __iter__(self):
        return CounterState(self.steps)

if __name__ == "__main__":
    for element in CountDown(10):
        symbols = '*' * element
        print(symbols)
        sleep(0.2)
--------------------------------------------------

出力
--------------------------------------------------
*********
********
*******
******
*****
****
***
**
*