Python のクロージャとレキシカル変数を使ったシングルトンっぽいもの

実際にはシングルトンではなくて、共有インスタンスを返すメソッドを実装する、ってだけなんだけど。

class A(object):

    @staticmethod
    def shared():
        instance = A()
        A.shared = staticmethod(lambda: instance)
        return instance
  1. 共有インスタンスとなるオブジェクトを生成し、レキシカル変数にバインドする
  2. このオブジェクトを返す無名関数で、元の関数 shared を置き換える

何が嬉しいかというと、共有インスタンスを参照するための変数(今回の場合は instance)を関数外から不可視にできること。変数のスコープが必要以上に広いと不安になります。実行時に遅延インスタンス化されるのが嫌なら、クラス定義の直後に一度呼び出すなりすればいいと思う。

gist:290628 に doctest とか追加したものを置いてあります。

Google AppEngine で Django 1.1 を使う

Google AppEngine の SDK および実行環境には、Web アプリケーション・フレームワークの Django がプリインストールされている。

しかし、デフォルトで有効になっているのは 0.96 という相当古いバージョンだ(もっとも、Google AppEngine リリース時点では、これが最新のバージョンであった)。すでにサポートも終了しており、バグや脆弱性の修正もされないため、できれば最新の 1.0/1.1系列を使いたい、という人が大半だろう。

しかし、これまで、バージョン 1.0 以降の Django を Google AppEngine で使うのは骨の折れる作業だった。

Sphinx 0.6.2 にアップグレードしたときのメモ

約一年ぶりに Sphinx を最新版に...しようとしたら色々苦労したので、変更点や手順をメモとして残しておく。

Python の dis モジュールでさまざまな import 文を disassemble する (2)

前回の記事への追記が長くなりそうなので、新しい記事にまとめました。

Python の dis モジュールでさまざまな import 文を disassemble する

Python Reference Manual6.12 The import statement を参考に、さまざまな形式の import 文を dis モジュールで disassemble してみた。

  1. 1
  2. 2
  3. 3
  4. 4
(17 記事)

Want fries with that?

Open Source Projects