Pythonの','.join()がキモいと思ってた時代が僕にもありました
↑を読んだ感想。
前に
'-'.join(a) # ← 閉口PythonでもRubyみたいに配列をメソッドチェーンでつなげたい - by edvakf in hatena
こんなふうに書いたら、Twitter やらコメント欄やらで色々なコメントをもらった。
最終的には
RubyのArray.joinが文字列専門になるのは「文字列はよく使うから特別」という発想だけど、Pythonにとっては「明確なメリットが無い限り特別を持ち込むのはキモイ」だろう。しかも、Pythonには文字列が埋め込み型だけで str, unicode, bytes, bytearray の4つ、(Python2.xではstrとbytesがエイリアスで、Py3kではstrがunicodeになってunicodeはなくなるので実質3つ)、そのうち一つだけを「特別」扱いするのはそもそも不可能だ。
','.join() がなぜキモイのか - methaneの日記
のようなことを考えて、自分の中では「別にキモくないじゃん」と納得した。(でも↑を読むと Python より Ruby のほうが「やり方が一つだけあるのがいいね」な言語に思えてしまう)
ただ納得できないのが、
「連結する側とされる側」というように分類すると、「区切り文字 join 連結される文字」が素直な能動態で、「連結される文字列 (is) join(ed by) 連結される文字」だと無理やりな受動態になるので、''.join() の方が素直だ。
','.join() がなぜキモイのか - methaneの日記
とか、前の自分の記事についたコメントの
joinが文字列のメソッドなのは英語の他動詞の使い方として正しい。
PythonでもRubyみたいに配列をメソッドチェーンでつなげたい - by edvakf in hatena
という意見。(id:methane さんの意見でないことは承知しています)
Python で (例えば) list のメソッドだけを見てみても、
l.append(x) l.extend(L) l.insert(i, x) l.remove(x) l.pop([i]) l.index(x) l.count(x) l.sort(f) l.reverse()
とあり、英語の使い方で言うなら
append x to l extend l by L insert x into l at i remove x from l pop [i] from l index of x in l count x in l sort l by f reverse l
と、全部バラバラで、','.join(l) みたいに「主語→動詞→目的語」的なものはひとつもない。index に至っては動詞でもない。
これを使うときにイチイチ「英語としてキモい」なんて考えてる Python 使いがどこにいるんだと。