Pythonでの書式指定出力(新しいスタイル)

入門Python3 7.1.2.2


Python3からは古いスタイルよりもこの新しいスタイルの書式指定を使った方がよいとのこと。

print("hello {}! {}".format("world",10))
$ py main.py
hello world! 10

「%s」などの書き方だったのが「{}」に変わり、文字列に対して%演算子で繋げていたのがformatメソッド呼び出しに変わるといったかんじですね。


さてこの新しいスタイルでいいなと思ったのは展開対象の引数を指定できるようになったところです。

print("hello {1}! {0}".format("world",10))
$ py main.py
hello 10! world

「{0}」でformatの一つ目、「{1}」で二つ目の引数を指定できます。


formatにキーワード引数を渡した場合はそのキー名でも指定できます。

print("hello {foo}! {bar}".format(foo="FOO", bar="BAR"))
$ py main.py
hello FOO! BAR


辞書を渡して指定することもできます。

d = {"foo":"FOO", "bar":"BAR"}
print("hello {0[foo]}! {0[bar]}".format(d))
$ py main.py
hello FOO! BAR


古いスタイルのようなフォーマット指定をしたい場合はコロンで区切って指定します。

# print("hello %s! %d" % ("world",10))と同じ意味
print("hello {:s}! {:d}".format("world",10))
$ py main.py
hello world! 10


新しいスタイルの方が柔軟で便利ですね。