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__メソッドがあるんだから同じ挙動になっているべきなんじゃないか?とか考えてしまい腑に落ちない。
Pythonメモ:%の右辺にリストを書いてもアンパッキングはしません More ログイン