パスワードを忘れた? アカウント作成
16570985 journal
日記

tuneoの日記: Pythonメモ:%の右辺にリストを書いてもアンパッキングはしません

日記 by tuneo

>>> l = ["foo", "bar", "baz"]
>>> print('%s %s %s' % l)
これでTypeError: not enough arguments for format stringという例外が起きる。

lをリストではなくタプルにすると問題なく動く。
>>> l = ("foo", "bar", "baz")
>>> print('%s %s %s' % l)
foo bar baz

またはリストをタプルに変換してもOK
>>> l = ["foo", "bar", "baz"]
>>> t = tuple(l)
>>> print('%s %s %s' % t)
foo bar baz

NGなコードは1個目の%sでl.__str__()を呼んでリストそのものを文字列に変換してしまうから、2個目3個目の%sで変換する値がない、という例外が起きているという仮説を立てたんだが、その理屈だとタプルにも__str__メソッドがあるんだから同じ挙動になっているべきなんじゃないか?とか考えてしまい腑に落ちない。

この議論は、tuneo (2938)によって トモとそのトモ専用として作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...