Effective Python イテレータ 読書メモ Part5

引数に対してイテレータを使うときには確実さを尊ぶ

Effective Pythonの読書メモです。
今回は、項目17について書いていきます。

 

問題のあるコード

 

修正したコード

修正1回目

ジェネレータを使って実装修正してみる。

修正2回目

イテレータプロトコルを使用して、修正する。

iter関数にイテレータが渡されると、イテレータオブジェクトそのものを返すようになっています。
コンテナ型がiter関数に渡されると、新しいイテレータオブジェクトを返してくれます。
この振る舞いをテストするのが、normalize_defensiveメソッドになります。
いてラブルであるが、コンテナ型ではない時にエラーが出力されます。

コンテナ型とは

複数のオブジェクトをまとめることができるデータ構造を持っています。
具体的には、String, List, Tuple, Set, Dictなどがあります。

図で見ると下記のような感じです。
Image from Gyazo
下記記事より引用
変数の基本

イテレータプロトコル

イテレータの特殊メソッドのことを指します。
①__iter__
②__next__

 

覚えておくこと

・__iter__メソッドをジェネレータとして実装することで、自分のイテラブルなコンテナ型を簡単に定義することができる。

 

参考記事

Python: ジェネレータをイテレータから理解する