仕事では C# を使っているせいか、Python でコレクションを操作するコード書いてるとき「LINQ 使えたらな〜」ってたまに思います。そういえば Python にはジェネレータとラムダ式があったな…。LINQ のメソッド構文なら Python で出来るかも。
LINQ to Object を Python で実装してみました。
select や where には関数を渡せるようにしています。AppEngine の db.Query みたいに、フィルタを文字列で指定させる方法も考えましたが、文字列を解析するのが面倒なので、この方法にしました。
こんな風に使います。
from linq import Enumerable source = [x for x in range(1, 10)] result = Enumerable(source).where(lambda x: x % 2 == 0)\ .select(lambda x: x * x)\ .to_list()
『lambda』がウザイですね!Python のラムダ式は C# みたいに演算子っぽい記述を採用できなかったのかなぁ。
作っておいてなんですが、Python にはリスト内包表記があるので、使い道はなかなか無さそうです。LINQ to XML なんかを実装すれば使い道が出てくるかもしれませんね。時間があるとき少しずついじっていきます。