Sep 2, 2008

Pythonでのワンライナー

バグがないプログラムを作るコツは、なんといっても書かないことです。
書かなければバグらないわけですから、当たり前と言えば当たり前ですが……
だとすると、たとえ一行じゃなくてもワンライナー的な書き方は有効でしょう。

その点、Pythonのリスト内包はあまり美しい文法ではないものの慣れると手放せません。
Noneが値として入っているようなリストを集計する場合、
sum([x or 0 for x in list])で一発です。
Noneが入っている文字列の集合を作るなら
"".join([str or "" for str in list])でリスト内の文字列が繋がって出てきます。

Noneかどうかより複雑なフィルターを使いたい場合は、bool値を返す関数filterを作って
def filter(): ...
sum([x for x in list if filter(x)])
でいけるので、ラクチンです。

うーん、すばらしい。Pythonで無名関数がもっと簡単に作れたら言うことないんですが。(関数内関数が使えるので、それほど問題でもないですけど)

No comments: