パスワードを忘れた? アカウント作成
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

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...