python2.6からwith文つかえる!

with文が便利.

例えば,openとかリソースを開いて閉じる作業の場合,こう書く

import sys

if __name__ == '__main__':
    """
    main section
    """
    try:
        with open (sys.argv[1], 'r') as fp:
            for line in fp:
                sys.stdout.write (line)
    except IOError, inst:
        sys.stderr.write (str (inst) + '\n')
        sys.exit ()

with文のブロック内処理の開始前にopenの作るオブジェクトの__enter__メソッドを実行する.

そして,ブロック内処理の終了後,例外の有無に関わらず__end__メソッドを実行する.

上の実例の場合,__end__メソッド内部でcloseが呼ばれるので自分でcloseをする必要がない!

すばらしい.

しかも,自前でも__enter__と__end__を実装したクラスをつくれば,withに渡せる.



ほかにもスレッドのロック機構にも使われてるらしい.いいね!