このサイトについて

そろそろ'-'.join(seq)についてひとこと言っておくか

そろそろ'-'.join(seq)についてひとこと言っておくか

「'-'.join(seq)がキモイ」とか「閉口」とか「あり得ない」とか「これが平気な奴は神経がおかしい」とかいう話題を見るたびに「そんな暇があったらコード書けハゲ」と思うのだ。あるいは


('-').join(seq)


とかすればちょっと和むんじゃね。ほら,なんかほっこり系の顔文字みたいじゃん。


冗談はさておき,「キモイ」という気持ちは実はよく分かる。でも,キモイとかいう,感覚的な,というか,直感的な問題を解決するために,特別な文法やルールを作らないのが,正しいPythonistaというか,Pyhton Wayというか,Pythonicというものなのだ,ということも頭に置いておいて欲しい思う。


それともう一つ。もっとお利口さんになりたい君は,文字列オブジェクトのjoin()メソッドが作られた歴史について学んでみてもいいんじゃないか。


そもそも,Pythonは1.5まで文字列オブジェクトにメソッドが無かった。では文字列操作はどうやっていたかというと,stringモジュールというものを使って,置換や検索を行っていたのだな。replace()とかfind()とかいう関数がモジュールに定義されていたのだ。

1.6で文字列オブジェクトにメソッドを追加する時点で,stringモジュールの関数がメソッドに昇格した。join()メソッドもstringモジュールにあったので,文字列メソッドになったのだ。

ちなみに,2.6でもstringモジュールは標準ライブラリに存在している。join()関数もしかり。join()の仕様は以下のようになっている。これは1.xの時と同じ。後方互換性を保つために残されているわけ。sepの部分がインスタンスに置き換わって,「'-'.join(seq)」という仕様のメソッドになったわけだ。すごい普通だし,全然acceptableだよね。なにか不自然なのかな。正直わかんね。


join(words, sep=' ')
    join(list [,sep]) -> string
   
    Return a string composed of the words in list, with
    intervening occurrences of sep.  The default separator is a
    single space.
   
    (joinfields and join are synonymous)

 

「join(seq, '-')」と書くことの方がある一定の人たちにとっては直感的なのかも知れないが,そのためだけに「from string import join」とかするのは時間の無駄のような気もするなあ。importとかタイプしている間にもっと有用でかっこいいコード書けばいいじゃん。そんなことない? うーん,そうかな。。。

2010-08-27 04:51