プログラムとか 思ったこととか 徒然ブログ 投稿一覧へ戻る

タグ "Python" が付いている投稿一覧

【 Python + PostgreSQL 】with ステートメントとコネクションプール ( connection pool ) を活用して、効率的で安全なデータベースコネクション、カーソル ( cursor ) の供給、利用ができるようにしよう!(その2)

Tags: Python , PostgreSQL , with , rollback , simpleconnectionpool

Published 2020年7月10日21:08 by T.Tsuyoshi

前回(その1)の記事は こちら からどうぞ。 今回は前回の最後に提起した課題から取り組んでいきましょう。 class ConnectionPool: def __init__(self): self.connection_pool = pool.SimpleConnectionPool(minconn=1, maxconn=1, database="Learning", user="postgres", password="1234", host="localhost") def __enter__(self): """ with …

【 Python + PostgreSQL 】with ステートメントとコネクションプール ( connection pool ) を活用して、効率的で安全なデータベースコネクション、カーソル ( cursor ) の供給、利用ができるようにしよう!(その1)

Tags: Python , PostgreSQL , connectionpool , with , psycopg2

Published 2020年7月9日23:05 by T.Tsuyoshi

今回はちょっと趣向を変えてデータベースを扱います。 まずは前提です。 システムにはすでに PostgreSQL と psycopg2 がインストールされており Python プログラムから利用可能になっていて、Learning データベースには countries テーブルがあり以下のようなデータが入っています。 create table if not exists countries ( id …

【 Effective Python, 2nd Edition 】@classmethod ポリモーフィズム ( polymorphism ) を利用して、複数の派生クラスをよりジェネリック ( generic ) に活用しよう!

Tags: Python , Effective , polymorphism , generic , classmethod

Published 2020年7月8日23:11 by T.Tsuyoshi

Python では、インスタンスに限らずクラスでもポリモーフィズム ( polymorphism ) を活用できます。 これはどういうことなんでしょうか? そして、どんなときに活用できるんでしょうか? Polymorphism は、クラス階層内におけるそれぞれの派生クラスが、同じインターフェースながら機能的には異なる独自のものを提供することを可能にします。 今回目指すのは MapReduce モデルの実装です。 MapReduce モデルは、ある処理を複数のサブプロセスに分割して実行し(map)、それぞれの結果を統合して1つの結論を導く(reduce)、分散コンピューティングモデルの1つです。 まずはデータを提供するためのベースとなる抽象クラスを用意します。 このクラスの派生クラスでは read() という共通インターフェースを提供します。 class …

【 Effective Python, 2nd Edition 】インスタンスを関数として利用可能にする __call__ 特殊関数を含んだクラスを定義してフック ( hook ) として利用することで、既存の API の機能拡張を計ろう!

Tags: Python , Effective , closure , defaultdict , hook , __call__

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

数多くの Python 組み込み API では、引数として関数を受け取ることでその「振る舞い」をカスタマイズできるようになっています。 このようなことをフック ( hook ) と呼んでいますが、定義には若干曖昧なところが見受けられ、「API の振る舞いを渡す関数によってカスタマイズする」行為そのものを指す場合や、API の振る舞いをカスタマイズするために渡す「関数自身」を指す場合等があるようです。 このことを踏まえて、この記事で「フック」という言葉が出てきた場合は、読まれている方々それぞれが解釈しやすい意味合いで捉えていただければ、と思います。 さて、本題に戻りまして、API 側からみればこのフックというのは、実行中にこちら側のコードを呼び出す手段、であるわけです。 分かりやすいところでは、list タイプの sort メソッドが、要素をどのように並べ替えるのか、ということを決定するために key …

【 Effective Python, 2nd Edition 】組み込みタイプ ( built-in types ) を利用していてネストが深くなってきたらクラス ( class ) を作成する頃合いです、の巻

Tags: Python , dictionary , Effective , namedtuple , defaultdict , class , oop , refactoring

Published 2020年7月6日22:30 by T.Tsuyoshi

Python はやはり OOP (Object-Oriented Programming) 言語ですから、いかにうまくクラスを設計、利用するかで将来的な拡張性、メンテナンス性が大きく左右されます。 基本的なことではありますけど「最重要」と言い切っても過言ではないと思いますので、今回からはクラスやインターフェース関連の話題を中心に取り上げていきます。 Python における辞書型 ( dictionary type ) は、オブジェクトの属性の保存、更新はもちろん、ある意味新たな属性の追加等にも利用可能な非常に優れた型ですね。 さてさて、生徒全員の成績を保存しておくプログラムを組みました。 辞書を利用することで、前もって生徒の名前や人数が分からなくても全然困ることはありません。 class SimpleGradebook: def __init__(self): …