blogこの広告は、90日以上更新していないブログに表示しています。2013-01-04Pythonのリスト内包表記をdisるPythonPythonにはリスト内包表記という可読性を著しく損なう記法がある。リスト内包表記は何故か速くて、for文を書く前にそれがリスト内包表記で書けないか考えることになっている。普通のforループと比較してみる。compre=compre)>>timeit.Timer('loop(100)').timeit()16.42305278778076>>timeit.Timer('compre(100)').timeit()8.095446825027466速い!やばい!100万回だから1回あたりの差は殆どないけど、ネストとかめちゃくちゃしたら意味のある差になると思う。確かに速いんだけど、リスト内包表記がPythonの哲学に沿ってないという意見がある。その辺は僕には分からない。いわゆるPythonistaな人たちが大切にしているPEPという文書があって、Pythonに関する重要なことが詰まっている。Code」で、みんな読むらしい。このPEP20に、可読性が大事とか、複雑なのは駄目とか書いてある。いうのは置いておいて、大事なのはリスト内包表記はとにかく速いってこと。なんで速いのかってことを書きたい。属性を取り出してそれを関数として呼び出す」という処理をしなければなりません。それに対して、リスト内包表記を使うと、インタプリタに直接「リストに要素を追加する」という処理をさせることができます。インタプリタが解釈する命令数が減る、属性の取り出しが不要になる、関数呼び出しが不要になる、という3つの理由で、リスト内包表記を使うと速くなります。