Pythonには、組み込みのformat関数も用意されている。
format(value, format_spec)
書式化したい値と、その書式指定を基に、書式指定が行われた文字列を返す。
引数/戻り値 | 説明 |
---|---|
value | 書式化したい値 |
format_spec | 書式指定(省略可能) |
戻り値 | format_specに従って、valueを書式指定したもの |
format関数の引数と戻り値 |
実際の利用例を以下に示す。
print(format(65, 'c'))
print(format(1234.567, '.2g'))
print(format(12.345, '0=+10'))
書式指定として渡される文字列は、予想が付く方もいるだろうが、既に見てきた置換フィールド内でコロン「:」に続ける書式指定と同じだ。コロンも置換フィールドを意味する「{}」も必要ないことには注意しよう。
この指定を省略した場合には、Pythonが組み込みで提供しているstr関数に、第1引数valueを渡したものが戻り値になる。str関数は、引数に渡されたオブジェクトを文字列化する関数だ(第5回の「文字と数値の変換:str/int/float関数」節も参照されたい)。
実行結果を以下に示す。
第5回の「フォーマット済み文字列(f文字列)」節では、変数や計算式の値を埋め込んだ「フォーマット済み文字列」(f文字列)について簡単に説明した。実は、f文字列の作成時にも上で見た書式指定を行える。
使い方は簡単で、f文字列内に埋め込みたい値を記述した「式」(変数や計算式、関数呼び出しなど)の後にコロン「:」を置き、それに続けて書式指定子を記述していくだけだ。利用例を以下に示す。
x = 1
y = 100
result = f'{x:0=+8} + {y:<8} = {x + y:$^8}'
print(result)
実行結果を以下に示す。
本稿で説明してきたformatメソッドは、Pythonにおいては「新しい形式の文字列の書式指定方法」だ。ということは、「古い形式の文字列の書式指定方法」もある。それが「%演算子を使用した文字列の書式指定」だ。古い形式ではあるが、今でもよく使われているので、少しだけ説明をしておこう。
%演算子による書式指定は次のような形式を取る。
%演算子の左側には「%s」「%(some_sumber)08d」などの「変換指定子」を含んだ文字列を置く(formatメソッドの呼び出しに使う書式指定文字列に相当)。C言語などに触れた経験がある人にはなじみ深いものといえる。右側には、そこに埋め込む値を「タプル」と呼ばれるデータ構造にまとめたものを置く。ここではかっこ「()」の中にカンマ区切りで変換指定子に埋め込むデータを並べたものだと考えてほしい(埋め込む値が1つであれば、タプルにまとめる必要はない)。
変換指定子は大まかに書くと次のようになる。
必須なのは、変換指定子を始める「%」と「変換型」の2つ(例:「%d」)。「変換フラグ」には「#」(別形式)、「0」(0埋め)、「-」(左寄せ)、「 」(正数には符号の代わりに空白文字を付加)、「+」(常に符号を表示)を指定できる。formatメソッドとは指定方法が少し違うことに注意しよう。「最小の表示幅」と「.精度」の指定はformatメソッドと同様だ。「変換型」にも上で見た「表示型」と似た指定を記述できる。
簡単な例を以下に示す。
print('%d + %d = %d' % (1, 2, 1 + 2))
print('%#x' % 65535)
最初のprint関数呼び出しの中では、「%d」という「変換指定子」を3つ使っている(この文字列中にある「%」は演算子ではなく、「ここに値を埋め込む」ことを意味する指定だ)。「d」は「10進数で表示する」ことを意味する変換型の指定だ。
文字列の右側には、書式指定を行うことを意味する%演算子があり、その右側に数値「1」「2」と計算式「1 + 2」をまとめた「タプル」がある(タプルについては以降の回で説明をするが、ここでは「かっこに囲んで、任意のデータをカンマ区切りで並べたもの」と考えてほしい)。かっこに囲まれた3つの値が3つある変換指定子「%d」の位置に順に埋め込まれる。
次のprint関数呼び出しの中では、「%#x」という変換指定子を使っている。「#」は上の「表示型(type)の指定」で取り上げた「別形式」での表示を意味する。その右にある「x」は「16進数で表示する」ことを指示する変換型の指定だ。
実行結果を見てみよう。
書式指定が行われ「1 + 2 = 3」という文字列や、別形式指定により「0x」を前置した16進数表記を含んだ「0xffff」という文字列ができていることが分かる。
もう1つ例を示そう。今度は置換フィールドに名前を付けるのに似た、「マップキー」という指定を追加したものだ。
'%(x)+.2e + %(y)+.2f = %(z)08.2f' % {'x': 1.1, 'y': -2.2, 'z': 1.1 + -2.2}
マップキーはかっこ「()」の中に記述する。そして、この場合は%演算子の右側にはタプルではなく、「辞書」を置く(「辞書を引数としてformatメソッドを呼び出す」も参照)。辞書の各キーと各マップキーが対応していることにも注意しよう。
上のコードでは、他にも変換型として「e」と「f」、ドット「.」に続けて書く「精度」(有効桁数)も指定している。この辺りの書き方は、どちらの方法でも同様だ。
実行結果を以下に示す。
古い形式の書式指定を読むときには、formatメソッドでは「{置換フィールド名:書式指定}」だったのが、古い形式では「%(キーマップ)書式指定」となっていることに留意しよう。既に述べたが変換フラグの指定方法がformatメソッドとは少々異なっているところもある点にも注意が必要だ。
今回は、Pythonの文字列の書式指定について、formatメソッドを中心に見てきた。現在では、変数の値や計算結果を埋め込んで書式指定した文字列を作成するには、f文字列かformatメソッドを使うのがよいだろう。特にf文字列は、formatメソッドを呼び出すよりもシンプルに必要なものを記述できるので、Python 3.6以降が使える環境であれば、f文字列を積極的に使いたいところだ。
「Python入門」
Copyright© Digital Advantage Corp. All Rights Reserved.