1. Pythonの軽量フレームワーク3種類を比較する

    ここでは軽量・コンパクトをウリにしているPythonのWebアプリケーションフレームワークであるBottle、Flask、Falconについて比較します。これらのフレームワークに対して、同様のリクエストを送り、同様のレスポンスを返させます。 記事を書くにあたり使用したもののバージョンは下記の通りです。

    • Ubuntu 14.04.2
    • Python 3.4.0
    • Bottle 0.12.8
    • Flask 0.10.1
    • Falcon 0.2
    続きを読む


  2. 英語の部分一致・単語の変化を無視した検索をする方法を考える

    曖昧さを極力排除するために、最初に定義を書きます。

    • この記事内では曖昧検索は「This book」と検索して「This is a pen.」がヒットすることを指すものとします。
    • 単語の変化を無視した検索とは以下とします。
      • 単数形、複数形による単語の変化、「cars」で検索した時に「car」がヒットすること
      • 時制による単語の変化、「do」で検索して「did」がヒットすること

    今回は検索した英文・英単語に対する訳を返すことを想定しています。

    続きを読む

  3. PythonのFunction Annotations

    Function Annotationsとは

    Python 3.0からFunction Annotationsという機能が利用できるようになりました。日本語では関数アノテーションと呼ばれています。これは自らの定義する関数に対する任意のメタデータです。 例えばこのようなint型の引数を二つ期待し、int型を返すことを期待する関数があったとします。

    def example(n, m):
        return n + m
    

    これはこのように関数アノテーションを加えることができます。

    def example(n: int, m: int) -> int:
        return n + m
    

    さらに

    example.__annotations__
    

    とすることで、

    {'return': <class 'int'>, 'm': <class 'int'>, 'n': <class 'int'>}
    

    このように定義を得られます。

    続きを読む

  4. 堅牢なBorgパターンのクラスをテストできるか

    Borgパターンとは

    Singletonはあるクラスのインスタンスを一つだけにするという実装です。しかし、実際にはインスタンスを一つにしたいのではなく、状態が同じインスタンスが手に入れば良い場合がほとんどではないでしょうか。Borgパターンはまさに、あるクラスのすべてのインスタンスで同じ状態を持つ実装です。

    Borgパターンの例

    これはアプリケーション内の設定を持つConfigクラスをBorgパターンで実装した例です。※良い例が浮かばなかったのでこれを掲載しましたが、この内容をPythonで行うのならモジュールを使うのが最も簡単でしょう。

    Pythonの言語仕様で、クラス変数(ここでは__shared_state)は全クラスで共通になっています。この__share_stateをオブジェクトの状態を保持する__dict__に代入することで、このクラスのすべてのインスタンスで状態が共有されることになります。

    class Config(object):
        __shared_state = {}
    
        def __init__(self, config=None):
            self.__dict__ = self.__shared_state
            if 'conf' not in self.__dict__:
                self.conf = config
    

    一番初めにConfigクラスをインスタンス化する際に

    config = Config({
        'key': 'value'
    })
    

    このように辞書を渡すことで、以後どこからでも最初に渡した辞書の内容にアクセスできます。

    続きを読む

2015 - 2017 (c) 成瀬基樹