文字列を空白で区切ってリストに変換する, Haskell で言う words 的な処理が Python で必要になったので,書いてみた.
import re def words(s): return re.findall( r"\S+", s ) words( "hoge fuga \n piyo" ) # ["hoge", "fuga", "piyo"]
正規表現さん素敵.
ここで終わりにしてもいいが,せっかくなので改良してみる.
まず,毎回 正規表現をコンパイルするのは無駄なので,予めコンパイルしておく.
import re word = re.compile(r"\S+") def words(s): return word.findall( s )
ただし,この場合,グローバル変数 word を書き換えられると困る(もっとも, Python のグローバル変数はファイルスコープな上に,関数内から書き換えるには予め global
指定を行う必要があるので,そんな状況は滅多に無いだろうが).
そこで word をローカルに落としこむことを考える. その為には関数生成用の関数を定義すればいい.
import re def def_words(): word = re.compile(r"\S+") global words def words(s): return word.findall( s ) def_words() del def_words
これで,外から不意にグローバル変数を書き換えられて,妙なことになる可能性は消える.
その代わりに Pythonic さも消えた気がするが,特に気にすることはなかろう.
追記
というわけで,
def words(s): return s.split()
が Pythonic な書き方,ってことで FA .
…まぁ,こういうこともあるさね.