SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
タグ
iterable
を含むブログ一覧
【Python 雑談・雑学 + coding challenge】iterator protocol の実装 --- __iter__ 特殊関数は何を返すべき? イテレータオブジェクト ( iterator object ) なら何でも、そう、generator expression でもOKです!
Published 2020年8月13日17:06 by mootaro23
さて、今回もちょっとしたコーディングチャレンジ ( coding challenge ) から。
問題 ( 制限時間: 25 分 ):
2 つの引数 (シーケンスと数値) を取るイテラブルクラス ( iterable class ) を定義します。
このクラスのオブジェクトは、「数値」の回数だけ「シーケンス」の要素を順番に返します。
もし「数値」が「シーケ…
【 Effective Python, 2nd Edition 】throw() メソッドを利用したジェネレータ ( generator ) 内部での状態遷移はなるだけ避けましょう。ネストが深くなってコードの読解性が落ちちゃいますよ!
Published 2020年7月4日23:31 by mootaro23
yield from 文や send() メソッドに加えて、ジェネレータを使う際にあまり利用されていない機能として throw() メソッドがあります。
ジェネレータが throw() メソッドによって呼び出されると、再開した時点の、すなわち、前回終了した時点の yield 式自体が渡された例外を即座に投げます。
そして、ジェネレータ内でその例外をキャッチしない場合、呼び出し…
【 Effective Python, 2nd Edition 】引数として受け取った値を関数内で複数回「消費」する場合には要注意! イテレータ ( iterator ) とコンテナ ( container ) の違いをちゃんと認識しよう!
Published 2020年6月29日20:44 by mootaro23
関数が引数としてリストをとる場合、そのリストを関数内部で複数回参照することはよくあります。
例えば、台湾旅行に行った日本人が訪れた観光地ごとの訪問者数のリストがあるとします (千人/年)。
そして人気度をみるために、それぞれの観光地が占める割合を計算したいとしましょう。
そのためには、まず訪問者数の合計を求め、続けて、それぞれの観光地の訪問数をその合計で割ることになりますね…
【 Effective Python, 2nd Edition 】アンパックのちょっとした使い方 - 1: 一時変数を使わずにスワップする、2: インデックス番号を用いないでネストしている iterable の要素を取り出す -
Published 2020年6月10日16:03 by mootaro23
1: 次のようなリストをアルファベット順に並べ替えるとします( sort() を使っちゃダメですよ)。
friends = ['Hana', 'Yuka', 'Nana', 'Saki']
Python に馴染みが薄い方は、次のように一時変数を利用して入れ替えを行うと思います。
def bubble_sort(a):
for _ in range(len(…
Python Cookbook [Implementing the Iterator Protocol : イテレータープロトコルの実装]
Published 2020年5月9日9:29 by mootaro23
Problem:
イテレーションをサポートするカスタムオブジェクトを作成したいが、イテレータプロトコルの実装では苦労したくない。
Solution:
イテレーションをサポートするオブジェクトを作成する一番簡単な手段は generator 関数を利用することでしょう。
" Delegating Iteration " の項で取り上げたクラスを再利用してみます。
今回は Nod…
Python Cookbook [Creating New Iteration Patterns with Generators : ジェネレーターを利用した独自イテレーションパターンの実装]
Published 2020年5月7日19:19 by mootaro23
Problem:
range() や reversed() といった組み込み関数とは異なるイテレーションパターンを実装したい。
Solution:
generator 関数を利用して実装します。
例えば、ある範囲内、あるステップ数で浮動小数点数を生成したいなら次のようになるでしょう。
def float_range(start, stop, step):
…
Python Cookbook [Delegating Iteration : 独自クラスへのイテレーション機能の実装]
Published 2020年5月1日19:41 by mootaro23
Problem:
list や tuple といったイテラブルを属性値として含む独自のコンテナクラスがある場合に、そのクラス自体でイテレーション機能を提供したい。
Solution:
クラス内で __iter__() メソッドを定義し、実態として、内部で保持するコンテナのイテレーターに動作をお任せするだけです、楽チンです。
class Topping:
def …