SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
タグ
yield
を含むブログ一覧
1
【 Effective Python, 2nd Edition 】throw() メソッドを利用したジェネレータ ( generator ) 内部での状態遷移はなるだけ避けましょう。ネストが深くなってコードの読解性が落ちちゃいますよ!
Published 2020年7月4日23:31 by mootaro23
yield from 文や send() メソッドに加えて、ジェネレータを使う際にあまり利用されていない機能として throw() メソッドがあります。
ジェネレータが throw() メソッドによって呼び出されると、再開した時点の、すなわち、前回終了した時点の yield 式自体が渡された例外を即座に投げます。
そして、ジェネレータ内でその例外をキャッチしない場合、呼び出し…
【 Effective Python, 2nd Edition 】ジェネレータ ( generator ) に値を注入したいなら、yield from 式と send() 関数の併用よりも、注入する値を提供するイテレータ ( iterator ) を渡しましょう、の巻
Published 2020年7月3日20:34 by mootaro23
さて今回取り上げる話題は前回の ジェネレータの反復作業中に外部から値を注入して出力結果に反映させよう!代入式の右辺に yield 式があったり、send() メソッドを使ったり!の巻 の続き、という位置づけですので、読んでいない方は目を通しておいていただいた方が理解しやすいと思います。
前回は、send() メソッドを利用するとジェネレータの yield 式に値を設定することが可能にな…
【 Effective Python, 2nd Edition 】ジェネレータの反復動作中に外部から値を注入して出力結果に反映させよう! 代入式の右辺に yield 式があったり、send() メソッドを使ったり!の巻
Published 2020年7月2日21:51 by mootaro23
yield 式を含むジェネレータ関数 ( generator function ) はシーケンスデータの値を1回に1つずつ提供してくれますが、このデータのやり取りはあくまでも一方通行です。
もし、ジェネレータ関数が反復作業をしている最中に、yield 式が出力する値に何らかの変更を加えるようなデータをこちら側から与えて、それに伴って出力の値が変化するような双方向コミュニケーションが取れ…
【 Effective Python, 2nd Edition 】yield from ステートメントでネストしたジェネレータ ( nested generators, composed generators ) を効率よく処理しよう!
Published 2020年7月1日12:32 by mootaro23
ジェネレータを利用することでメモリ消費を抑えることができたり、イテラブル可能な独自クラスを簡単に実装できたり、と多くの利点を享受することができます。
今回は、そんなジェネレータがネストしている場合の効率的な実行方法についてです。
さて、インターバルトレーニング用のプログラムを作りたいと思っています。
最初は速いペースで、ちょっと休んで、次はゆっくりとしたペースで、という指示を出せる…
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):
…
1