SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
タグ
python
を含むブログ一覧
【 Effective Python, 2nd Edition 】@classmethod ポリモーフィズム ( polymorphism ) を利用して、複数の派生クラスをよりジェネリック ( generic ) に活用しよう!
Published 2020年7月8日23:11 by mootaro23
Python では、インスタンスに限らずクラスでもポリモーフィズム ( polymorphism ) を活用できます。
これはどういうことなんでしょうか? そして、どんなときに活用できるんでしょうか?
Polymorphism は、クラス階層内におけるそれぞれの派生クラスが、同じインターフェースながら機能的には異なる独自のものを提供することを可能にします。
今回目指すのは …
【 Effective Python, 2nd Edition 】クラスインスタンスを関数として利用可能にする __call__ 特殊関数を含んだクラスを定義してフック ( hook ) として利用することで、既存の API の機能拡張を計ろう!
Published 2020年7月7日20:57 by mootaro23
数多くの Python 組み込み API では、引数として関数を受け取ることでその「振る舞い」をカスタマイズできるようになっています。
このようなことをフック ( hook ) と呼んでいますが、定義には若干曖昧なところが見受けられ、「API の振る舞いを渡す関数によってカスタマイズする」行為そのものを指す場合や、API の振る舞いをカスタマイズするために渡す「関数自身」を指す場合等が…
【 Effective Python, 2nd Edition 】組み込みタイプ ( built-in types ) を利用していてネストが深くなってきたらクラス ( class ) を作成する頃合いです、の巻
Published 2020年7月6日22:30 by mootaro23
Python はやはり OOP (Object-Oriented Programming) 言語ですから、いかにうまくクラスを設計、利用するかで将来的な拡張性、メンテナンス性が大きく左右されます。
基本的なことではありますけど「最重要」と言い切っても過言ではないと思いますので、今回からはクラスやインターフェース関連の話題を中心に取り上げていきます。
Python における辞書…
【 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
ジェネレータを利用することでメモリ消費を抑えることができたり、イテラブル可能な独自クラスを簡単に実装できたり、と多くの利点を享受することができます。
今回は、そんなジェネレータがネストしている場合の効率的な実行方法についてです。
さて、インターバルトレーニング用のプログラムを作りたいと思っています。
最初は速いペースで、ちょっと休んで、次はゆっくりとしたペースで、という指示を出せる…