2種類のPythonの書式設定
Pythonで文字列にデータを差し込む方法を探していて、「%と{}は何が違うのだろう・・・?」または「どちらを使うべきなのだろう・・・?」という疑問を持ったことはありませんか?
実務で少しPythonを使っており、この疑問を解消することができたので、ここに備忘録を残します。
古いスタイル
この古いスタイルは、Python2、3どちらもサポートしている。
書式指定は、string % dataという形式を使う。
以下の表に、データ型を示す差し込みポイントの形式と、対応するデータ型をまとめた。
指定ポイント形式 | データ型 |
---|---|
%s | 文字列 |
%d | 10進数 |
%x | 16進数 |
%o | 8進数 |
%f | 10進数float |
%e | 指定形式float |
%g | 10進数float or 指定形式float |
%% | リテラルの% |
(例)
language = 'python'
print("Hi, %s!" % language)
Hi, python!
(例2)
weather = 'rainy'
int = 3
print("It will be %s %d days later." % (weather, int))
It will be rainy 3 days later.
文字列の中の%の数と差し込むデータの数は一致していなければならない。
また、差し込むデータが1つの場合はlanguageのようにそのままデータを置けばいいが、複数のデータを差し替える場合は、(weather, int)のようにタプルでまとめなければならない。
新しいスタイル
この新しいスタイルはPython2.6以上でサポートされている。
.format(data)という形式を使う。
(例)
s = 'python'
f = 3.7
n = 0
print("{} {} {}".format(s, f, n))
python 3.7 0
(例2)
s = 'python'
f = 3.7
n = 0
print("{} {} {}".format(n, s, f))
0 python 3.7
古いスタイルでは、%が文字列内に出てきた順序で引数を渡さなければならなかったが、新しいスタイルでは自由に順序を指定できる。
まとめ
今までは何となくその時の気分で古いスタイルと新しいスタイルを使い分けていました。。。
今回を機に、Python3では自由に順序を入れ替えられる柔軟性の高い新しいスタイル{}で統一しようと思いました。
追記
コメントで教えていただいたf書式が、3.6以降に取り入れられた最新の書式であるということなので、ここに追加する。
(例)
s = 'python'
f = 3.7
n = 0
print(f"{s} {f} {n}")
python 3.7 0