Pythonの技法:リスト以外の選択肢「関数の生成」

文:Nick Gibson(Builder AU)  翻訳校正:原井彰弘
2008-01-17 15:10:00
  • このエントリーをはてなブックマークに追加

 すでにPythonでのリストの内包表記について記事を書いたが、その強力さに魅力を感じて、明示的なループを内包表記にリファクタリングしたいと思っている方々から、多くのフィードバックをいただいてた。

 ただし、何事においてもそうであるが、内包表記が役立つ場面がある一方で、ほかの書き方をした方がよい場面というのも存在する。そこで本稿では、内包表記ではなく関数ファクトリの使用がより適している例を取り上げて紹介する。

 本稿では、PythonによるHTMLのカラーコードの生成を例として用いる。HTMLでスムーズなグラデーションを作成する必要があり、エンコードの方式にそれほどこだわらないのであれば、テーブルを用いてbgcolor属性を変化させていくという手法を用いることによりとりあえずは作成できる。このケースでは、以下のようにしてリストの内包表記を用いるのがよいアプローチだろう。

def colourslist(red, green, blue, steps):

        def f((start,end), i, steps): 
                return start + i * (end-start)/float(steps)     

        colours = [tuple([f(c,i,steps-1) 
                        for c in [red,green,blue]]) 
                        for i in range(steps)]
        return ["%02x%02x%02x" % (rgb) for rgb in colours]

print ""
print ""
for colour in colourslist((90,90),(90,255),(90,90),200):
         print "" % (colour)
print "
" print ""

 この例を実行すると、以下のように期待どおりの出力が行われる。

                                                                                                                                                                                                                                                                                                                                                                                                               

 Pythonプログラマの間では、デザインパターンに関する論争が時折生じる。他のオブジェクト指向言語からPythonの世界に入ってきた人には、デザインパターンなしでは生きていけないという人も多い。一方で、パターンを重要視しない言語からPythonの世界に入った人は、デザインパターンはすべてのプログラムがくぎに見える人のためのハンマーにすぎない、と考えている。しかし、いずれにしてもFactoryパターンはさまざまな問題を解決する上で役立つツールであるだろう。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]