Python 3 で文字列に変数や定数の値を埋め込む方法の第3回は、組み込み関数の format()
です。
format 関数
format()
関数は、オブジェクト (文字列や数値など,インスタンス) を書式化して返す関数です。
構文と例
引数は、次の形式で指定します。
と言っても解りにくいので、まずは例を挙げます。
# 中央揃え
foo = format('egg', '_^7')
print(foo)
# __egg__
# int を 16進数表記に変換
print(format(127, 'x'))
# 7f
# int を対応する Unicode 文字に変換
print(format(12354, 'c'))
# あ
例のように、format()
関数は文字列や数値などのオブジェクトに対して、書式指定ミニ言語で指定した書式を適用した結果を返します。
ゼロ埋め
format()
関数はゼロ埋め (ゼロパディング) に応用できます。
# 正の整数
print(format(123, '05'))
# 00123
# 負の整数
print(format(-123, '05'))
# -0123
# 浮動小数 (桁数には符号や小数点も含む点に注意)
print(format(-12.3, '07'))
# -0012.3
数値文字列の場合は一旦 int に変換することで、符号表記の問題を回避します。
int や float の値には format()
、str の数値文字列には str.zfill() が便利です。
# 符号付き数値文字列のゼロ埋めの失敗例
print(format('-567', '0>5'))
# 0-567
# 数値文字列を int に変換して解決 (書式指定の違いにも注意)
print(format(int('-567'), '05'))
# -0567
# 数値文字列には str.zfill() メソッドが便利
foo = '-567'
print(foo.zfill(6))
# -00567
実装の詳細
より正確に言えば、format(オブジェクト, 書式)
はオブジェクトのクラス (組み込み型など) の .__format__()
メソッドを呼び出します。その際に書式が引数として渡されます。
従って、指定した書式がどのように解釈されるかは、オブジェクトのクラスの実装に依存します。
ただし str や int などの組み込み型では、書式指定ミニ言語形式で解釈される場合がほとんどです。
str.format() メソッドとは異なる
組み込み関数 format()
は、str オブジェクトのメソッド str.format()
とは違う関数です。
どちらも書式指定ミニ言語が使える点は同じですが、引数の指定方法は全く異なりますので、混同しないように注意しましょう。
なお str.format()
メソッドを「format 関数」として解説する文献も少なくありませんが、公式の表現に従えばこれは誤りです。解説者も混同するほどの紛らわしさと言えるでしょう。
format() 関数の必要性
format()
関数はシンプルな機能のみを持っており、複合的な文字列の埋め込みには向きません。
文字列の埋め込みには f 文字列や str.format()
メソッドのほうが便利です。
この関数を使う機会は少ないのですが、自分以外の人が書いたスクリプトを読むときなど、混同を避ける為に覚えておいて損はないでしょう。
参考
※ Python 3.10 で動作確認。
コメントを投稿