###
2.3.6.2 文字列フォーマット操作

文字列および Unicode オブジェクトには固有の操作: `%` 演算子 (モジュロ) があります。この演算子は文字列 フォーマット化 または 補間 演算としても知られています。 `format % values` (format は文字列または Unicode オブジェクト)とすると、format 中の `%` 変換指定は values 中のゼロ個またはそれ以上の要素で置換されます。 この動作は C 言語における `sprintf()` に似ています。 format が Unicode オブジェクトであるか、または `%s` 変換を使って Unicode オブジェクトが変換される場合、その結果も Unicode オブジェクトになります。

format が単一の引数しか要求しない場合、values は タプルでない単一のオブジェクトでもかまいません。 2.9それ以外の場合、values はフォーマット文字列中で指定された項目と 正確に同じ数の要素からなるタプルか、単一のマップオブジェクトでなければ なりません。

一つの変換指定子は 2 またはそれ以上の文字を含み、その構成要素は 以下からなりますが、示した順に出現しなければなりません:

1. 変換指定子が開始することを示す文字 "`%`"。
2. マップキー (オプション)。 丸括弧で囲った文字配列からなります (例えば `(someone)`) 。
3. 変換フラグ (オプション)。一部の変換型の結果に影響します。
4. 最小のフィールド幅 (オプション). "`*`" (アスタリスク) を指定した場合、実際の文字列幅が values タプルの次の要素から読み 出されます。タプルには最小フィールド幅やオプションの精度指定の後に 変換したいオブジェクトがくるようにします。
5. 精度 (オプション)。"`.`" (ドット) とその後に続く精度 で与えられます。"`*`" (アスタリスク) を指定した場合、精度 の桁数はタプルの次の要素から読み出されます。タプルには精度指定の 後に変換したい値がくるようにします。
6. 精度長変換子 (オプション)。
7. 変換型。

`%` 演算子の右側の引数が辞書の場合 (またはその他のマップ型の場合)、 文字列中のフォーマットには、辞書に挿入されているキーを丸括弧で囲い、文字 "`%`" の直後にくるようにしたものが含まれていなければ なりません 。マップキーはフォーマット化したい値をマップから 選び出します。例えば:

    >>> print '%(language)s has %(#)03d quote types.' % \
              {'language': "Python", "#": 2}
    Python has 002 quote types.

この場合、 `*` 指定子をフォーマットに含めてはいけません (`*` 指定子は順番付けされたパラメタのリストが必要だからです。)

変換フラグ文字を以下に示します:

フラグ | 意味
--- | ---
`#` | 値の変換に (下で定義されている) ``別の形式'' を使います。
`0` | 数値型に対してゼロによるパディングを行います。
`-` | 変換された値を左寄せにします ("`0`" と同時に与えた 場合、"`0`" を上書きします) 。
`` | (スペース) 符号付きの変換で正の数の場合、前に一つスペースを空けます (そうでない場合は空文字になります) 。
`+` | 変換の先頭に符号文字 ("`+`" または "`-`") を付けます("スペース" フラグを上書きします) 。

精度長変換子として、`h` 、 `l` 、および `L` を使う ことができますが、Python では必要ないため無視されます。

変換型を以下に示します:

変換 | 意味 | 注釈
--- | --- | ---
`d` | 符号付き 10 進整数。 |
`i` | 符号付き 10 進整数。 |
`o` | 符号なし 8 進数。 | (1)
`u` | 符号なし 10 進数。 |
`x` | 符号なし 16 進数 (小文字)。 | (2)
`X` | 符号なし 16 進数 (大文字)。 | (2)
`e` | 指数表記の浮動小数点数 (小文字). |
`E` | 指数表記の浮動小数点数 (大文字). |
`f` | 10 進浮動小数点数。 |
`F` | 10 進浮動小数点数。 |
`g` | 指数部が -4 以上または精度以下の場合には "`e`" 、それ以外の場合には "`f`" と同じ。 |
`G` | 指数部が -4 以上または精度以下の場合には "`E`" 、それ以外の場合には "`F`" と同じ。 |
`c` | 文字一文字 (整数または一文字からなる文字列を受理します)。 |
`r` | 文字列 (python オブジェクトを `repr()` で変換します)。 | (3)
`s` | 文字列 (python オブジェクトを `str()` で変換します)。 | (4)
`%` | 引数を変換せず、返される文字列中では文字 "`%`" になります。 |

注釈:

(1)
  別形式の出力にした場合、変換結果の先頭の数字がゼロ ("`0`") でないときには、数字の先頭と左側のパディングとの間にゼロを挿入します。
(2)
  別形式にした場合、変換結果の先頭の数字がゼロでないときには、 数字の先頭と左側のパディングとの間に `'0x'` または `'0X'` (フォーマット文字が "`x`" か "`X`" かに依存します) が挿入されます。
(3)
  `%r` 変換は Python 2.0 で追加されました。
(4)
  オブジェクトや与えられた書式が `unicode` 文字列の場合、変換後の文字列も `unicode` になります。

Python 文字列には明示的な長さ情報があるので、`%s` 変換において `'\0'` を文字列の末端と仮定したりはしません。

安全上の理由から、浮動小数点数の精度は 50 桁でクリップされます; 絶対値が 1e25 を超える値の `%f` による変換は `%g` 変換で置換されます 2.10その他のエラーは例外を送出します。

その他の文字列操作は標準モジュール `string` および `re`.で定義されています。

... タプルでない単一のオブジェクトでもかまいません。2.9
  従って、一個のタプルだけをフォーマット出力したい場合には出力したいタプルを唯一の要素とする単一のタプルを values に与えなくてはなりません。
... 変換で置換されます 2.10
  この範囲に関する値はかなり適当なものです。 この仕様は、正しい使い方では障害とならず、かつ特定のマシンにおける 浮動小数点数の正確な精度を知らなくても、際限なく長くて意味のない数字から なる文字列を印字しないですむようにするためのものです。