Python 3 で文字列に変数や定数の値を埋め込む方法の第2回は、str.format()
です。
str.format()
str オブジェクトの .format()
メソッドでは、置換フィールド (プレースホルダー) を利用して埋め込みを行います。
置換フィールドは位置番号などを波括弧 {}
で囲んだ文字列で、その部分に文字列や変数を埋め込みます。
構文と戻り値
例えば text.format(x, y)
のとき、text が置換フィールドを含んだテンプレートで、引数 x と y が text に埋め込むオブジェクトです。
引数の数は可変で、置換フィールドの数に応じて指定します。
置換結果がこのメソッドの戻り値になります。
str オブジェクトはイミュータブル (不変) なので、text の内容は変更されません。
文字列の埋め込み
文字列リテラルの埋め込み例です。
.format()
に渡した引数が順に位置番号 0, 1 … に対応します。
# 位置番号を指定して文字列を埋め込む
foo = '{0} is {1}'
print(foo.format('Fox', 'you'))
# Fox is you
# 位置番号の順序は任意で指定できる
bar = '{2} is {0} {1}'
print(bar.format('the', 'fox', 'She'))
# She is the fox
# 位置番号は省略可能 (左から順に番号を自動付与)
baz = '{} is {}'
print(baz.format('Fox', 'me'))
# Fox is me
変数の埋め込み
変数の埋め込み例です。
整数などの str に変換できるオブジェクトはそのまま指定できます。
# 変数の埋め込み
num = 3
unit = 'dogs'
text = 'There are {} {}.'
print(text.format(num, unit))
# There are 3 dogs.
キーワードによる引数指定
位置番号の代わりに、キーワードでも引数を指定できます。
# キーワード引数で指定
text = '{aa} is {bb}' # f 文字列ではないことに注意
print(text.format(aa='Cat', bb='you'))
# Cat is you
# 辞書をキーワード引数に展開して指定
d = {'bb': 'him', 'aa': 'Dog'}
print(text.format(**d))
# Dog is him
書式指定
f 文字列と同様に、書式指定ミニ言語で書式を指定できます。
# 中央揃えと小数点第三位までの書式指定
text = '{:_^8} = {:.3f}…'
print(text.format('2π', 3.14159 * 2))
# ___2π___ = 6.283…
書式指定の詳細は公式ドキュメントをご覧ください。
str.format() の利点
str.format()
の利点は、プレースホルダーを含む文字列をテンプレートとして定義できることです。
テンプレートを別の場所で定義したり、実行時に生成したりして出力結果を変えたい場合に便利です。
なお、組み込み関数 format() は引数や機能が異なります。
str.format()
メソッドと同じ名前で紛らわしいのですが、混同しないようにしましょう。
参考
※ Python 3.8 で動作確認。
コメントを投稿