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)
--------------------------------------------------
出力
--------------------------------------------------
*********
********
*******
******
*****
****
***
**
*