タグ "iterator" を含むブログ一覧 投稿一覧へ戻る

【Python 雑談・雑学 + coding challenge】iterator protocol の実装 --- __iter__ 特殊関数は何を返すべき? イテレータオブジェクト ( iterator object ) なら何でも、そう、generator expression でもOKです!

Tags: generator , iterable , iterator , __iter__ , miscellaneous , challenge , __next__ , stopiteration , python

Published 2020年8月13日17:06 by T.Tsuyoshi

さて、今回もちょっとしたコーディングチャレンジ ( coding challenge ) から。 問題 ( 制限時間: 25 分 ): 2 つの引数 (シーケンスと数値) を取るイテラブルクラス ( iterable class ) を定義します。 このクラスのオブジェクトは、「数値」の回数だけ「シーケンス」の要素を順番に返します。 もし「数値」が「シーケ…

【 Effective Python, 2nd Edition 】throw() メソッドを利用したジェネレータ ( generator ) 内部での状態遷移はなるだけ避けましょう。ネストが深くなってコードの読解性が落ちちゃいますよ!

Tags: generator , iterable , iterator , yield , python , effective

Published 2020年7月4日23:31 by T.Tsuyoshi

yield from 文や send() メソッドに加えて、ジェネレータを使う際にあまり利用されていない機能として throw() メソッドがあります。 ジェネレータが throw() メソッドによって呼び出されると、再開した時点の、すなわち、前回終了した時点の yield 式自体が渡された例外を即座に投げます。 そして、ジェネレータ内でその例外をキャッチしない場合、呼び出し…

【 Effective Python, 2nd Edition 】ジェネレータ ( generator ) に値を注入したいなら、yield from 式と send() 関数の併用よりも、注入する値を提供するイテレータ ( iterator ) を渡しましょう、の巻

Tags: generator , iterator , yield , python , effective

Published 2020年7月3日20:34 by T.Tsuyoshi

さて今回取り上げる話題は前回の ジェネレータの反復作業中に外部から値を注入して出力結果に反映させよう!代入式の右辺に yield 式があったり、send() メソッドを使ったり!の巻 の続き、という位置づけですので、読んでいない方は目を通しておいていただいた方が理解しやすいと思います。 前回は、send() メソッドを利用するとジェネレータの yield 式に値を設定することが可能にな…

【 Effective Python, 2nd Edition 】引数として受け取った値を関数内で複数回「消費」する場合には要注意! イテレータ ( iterator ) とコンテナ ( container ) の違いをちゃんと認識しよう!

Tags: generator , iterable , iterator , protocol , python , effective

Published 2020年6月29日20:44 by T.Tsuyoshi

関数が引数としてリストをとる場合、そのリストを関数内部で複数回参照することはよくあります。 例えば、台湾旅行に行った日本人が訪れた観光地ごとの訪問者数のリストがあるとします (千人/年)。 そして人気度をみるために、それぞれの観光地が占める割合を計算したいとしましょう。 そのためには、まず訪問者数の合計を求め、続けて、それぞれの観光地の訪問数をその合計で割ることになりますね…

【 Effective Python, 2nd Edition 】リストを返す関数を作るなら、ジェネレータを返しちゃダメか1回立ち止まって考えよう、の巻

Tags: generator , iterator , python , effective

Published 2020年6月27日19:16 by T.Tsuyoshi

結果としてシーケンスを返す関数を作成する場合、最も一般的な選択肢は「リストを返す」ということでしょう。 次の例は、受け取った文字列について、文字列中の各単語の先頭インデックス番号と該当する単語のタプルからなるリストを返すものです。 sentence = "Nana is cute and very popular among my friends." def index…