【Python入門】format関数で文字列の書き方

※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト：[【Python入門】format関数で文字列の書き方](http://programming-study.com/technology/python-format/)

#【Python入門】format関数で文字列の書き方

Pythonで変数を文字列に埋め込むには%演算子を使った%記法が長く用いられてきましたが、Python2.6以降はそれに代わる新しい方式が登場しました。それが「format関数」を使って変数を文字列中に埋め込む方法です。今回は「format関数」の使い方について説明します。


目次 [非表示]
1 [format関数とは？](##format関数とは？)
2 [format関数の構文](##format関数の構文)
　　　2.1 [複数の引数を与える](###複数の引数を与える)
　　　2.2 [リストやタプルを埋め込む](###リストやタプルを埋め込む)
3 [format関数の書式指定](##format関数の書式指定)
　　　3.1 [書式指定のやり方](###書式指定のやり方)
　　　3.2 [数値表現](###数値表現)
　　　3.3 [幅](###幅)

##format関数とは？

format関数は、Pyhonで変数の文字列への埋め込みに使われます。とくに、print関数で変数を任意の文字列とともに出力したいときに使われます。format関数の基本的な構文は以下のようになります。

```text
'任意の文字列{}任意の文字列'.format(変数)
```
format関数の引数に、文字列に埋め込みたい変数を置きます。すると、{}のある部分にその変数が埋め込まれます。これにより、変数と文字列を一緒に出力することができます。例えば、計算結果を変数に代入し、文字列で単位を付けたうえで出力する、といったことが可能です。

```py3
apple  = 50
orange = 100
total = apple + orange

print('合計：{}円'.format(total))
```

```text:実行結果
合計：150円
```

##format関数の構文

format関数がどういったものかはお分かりになったと思います。ここでは、format関数のさらに詳しい構文についてみていきます。

###複数の引数を与える

format関数には複数の変数を引数として渡し、文字列に埋め込むことができます。複数の変数を埋め込む場合は、どの引数をどの{}に埋め込むかを指定する必要がありますが、指定の方法はいくつかあります。代表的なものに、以下のような指定方法があります。

```text
'{0}, {1}, {2}...'.format(変数1, 変数2, 変数3….)  #インデックス（添え字）で指定
'{h1}, {h2},{h3}..'.format(h1=変数1, h2=変数2, h3=変数…)  #キーワード引数で指定
'{h1},{h2},{h3}…'.format(**{'h1':変数1, 'h2':変数2, 'h3':変数3….} )  #辞書で指定
```
「インデックスで指定」は、{}に埋め込みたい変数が、format関数の何番目の引数かをインデックスとして{}内に記述して指定する方式です。

「キーワード引数で指定」は、引数に名前を付けて、その名前で指定する方法です。引数1つ1つに名前を付けないといけませんが、引数の順番が変わっても結果が変わらないというメリットがあります。「辞書で指定」はやっていることはキーワード引数で指定する方法と同じですが、辞書型を使って引数に名前を付けています。

どの方法でも複数の引数を埋め込めますが、基本的には「インデックスで指定」がシンプルで使いやすいです。

```py3
apple  = 50
orange = 100
total = apple + orange

print('りんご：{0}円 みかん：{1}円 合計：{2}円'.format(apple, orange, total))
```

```text:実行結果
りんご：50円 みかん：100円 合計：150円
```

###リストやタプルを埋め込む

format関数を使えばリストやタプルといったシーケンス型の変数も埋め込むことができます。{}の中にリストやタプルの要素の添え字を書くことで、リストやタプルの要素を埋め込みます。

```text
'{0[添え字]}, {0[添え字]}, {1[添え字]}, {1[添え字]}…'.format(リスト1, リスト2….) 
```
{0[添え字]}の左側の数字が{}に埋め込みたい変数（この場合リストやタプル）がformat関数の何番目の引数かを表していて、[添え字]がその変数の中で表示したい要素のインデックスになっています。例えば{0[1]}であれば、0番目の引数の1番目の要素を表しています。

```py3
apple  = 50
orange = 100
total = apple + orange

list = [apple, orange, total]  #リストの作成

print('りんご：{0[0]}円 みかん：{0[1]}円 合計：{0[2]}円'.format(list))
```

```text:実行結果
りんご：50円 みかん：100円 合計：150円
```

##format関数の書式指定

format関数を使って変数を文字列に埋め込む際には、その書式を指定することができます。書式にはたくさんの種類があるのですべては紹介しきれませんが、そのうちよく使われるものを紹介します。

###書式指定のやり方

書式を指定して埋め込む場合は、以下のようにします。

```text
'{0:指定したい書式の型}'format(変数)
```
{}の中に:を書き、その右側に指定したい書式の型を書くことで、書式を指定することができます。

###数値表現

数値には、私たちが普段使っている10進数以外にも2進数や16進数といったものがあります。10進数で埋め込む場合には特に指定しなくてもかまいませんが、それ以外の進数で埋め込みたい場合は書式を指定しましょう。

|型名|説明|
|---|---|
|b　|2進数で出力|
|d　|10進数で出力|
|o　|8進数で出力|
|x  |16進数で出力|
|X  |16進数で出力|

```py3
decimal = 106
print('{0}は2進数だと{0:b}、8進数だと{0:o}、16進数だと{0:X}'.format(decimal))
```

```text:実行結果
106は2進数だと1101010、8進数だと152、16進数だと6A
```

### 幅

format関数で変数を文字列に埋め込む際には、埋め込む際の幅と表示位置を指定することもできます。

|型名|説明|
|---|---|
|<任意の幅|任意の幅を取り、左詰め|
|>任意の幅|任意の幅を取り、右詰め|
|^任意の幅|任意の幅を取り、中央寄せ|
幅はあらかじめスペースキーを使って入れておいてもいいですが、数字で指定するほうがパッと見てどれだけの幅を取っているかが分かりますし、ソースコードもスッキリします。

```py3
string1 = '左詰め'
string2 = '中央寄せ'
string3 = '右詰め'

print('{0:<10}'.format(string1))
print('{0:^10}'.format(string2))
print('{0:>10}'.format(string3))
```

```text:実行結果
左詰め       
   中央寄せ   
       右詰め
```

参考サイト
[【Python入門】format関数で文字列の書き方](http://programming-study.com/technology/python-format/)
※ご指摘いただいた点について訂正致しました。