Python3では '%d'とか'%+5.3lf'のような記法は推奨されず、廃止される。 代わりにformat()を使う必要がある。 このような変更がなされた理由については、 Python 3.0 Hacks第6回 Pythonicな文字列フォーマットforamat()メソッド が分かりやすい。 高尚な理由はどうでもよくて、とりあえず昔の%記法との対応関係表が欲しいが見つからなかった。 仕方ないから、よく使うformatについてC言語のprintf関数との対応表を作った。 極めて愚直な表なので、とにかくこれさえ見れば新旧の違いが理解できる。
| 結果表示 | C言語 printf(%記法) | python print(format記法) |
|---|---|---|
| hoge(改行なし) | printf("hoge") | print("hoge", end="") |
| hoge(改行あり) | printf("hoge\n") | print("hoge") |
| hoge | printf("%s\n", "hoge") | print("{0}".format( "hoge")) |
| hoge | printf("%s\n", "hoge") | print("{0:s}".format( "hoge")) |
| hoge5piyo | printf("hoge%dpiyo\n", 5) | print("hoge{0}piyo".format( 5)) |
| 3 a 7 | printf("%d %s %d\n",3,"a",7) | print("{0} {1} {2}".format(3,"a",7)) |
| ------- | ------- | ------- |
| 5 | printf("%d\n", 5) | print("{0:d}".format( 5)) |
| +5 | printf("%+d\n", 5) | print("{0:+d}".format( 5)) |
| +005 | printf("%+04d\n", 5) | print("{0:+04d}".format( 5)) |
| ------- | ------- | ------- |
| 12.3456 | printf("%lf\n", 12.3456) | print("{0:f}".format( 12.3456)) |
| _12.34 | printf("%6.2lf\n", 12.3456) | print("{0:6.2f}".format( 12.3456)) |
| +12.34 | printf("%+6.2lf\n", 12.3456) | print("{0:+6.2f}".format( 12.3456)) |
| 012.34 | printf("%06.2lf\n", 12.3456) | print("{0:06.2f}".format( 12.3456)) |
| ------- | ------- | ------- |
| _1.23e+01 | printf("%9.2e\n", 12.3456) | print("{0:9.2e}".format( 12.3456)) |
| +1.23e+01 | printf("%+9.2e\n", 12.3456) | print("{0:+9.2e}".format( 12.3456)) |
| 01.23e+01 | printf("%09.2e\n", 12.3456) | print("{0:09.2e}".format( 12.3456)) |
6.2fは、小数点2桁だけ必ず表示しつつ、6文字分の表示領域に収める場合(ただし999以上なら6文字オーバー)9.2eは、小数点2桁だけ必ず表示しつつ、指数表記で9文字分の表示領域に収める場合
これぐらい知っとけば、一応なんとかなる。
メモ
その他、C言語にはない新しい表記法については、 format関数による文字列フォーマット(新しい形式) が分かりやすい。
公式の解説は 7.1.3. 書式指定文字列の文法
カーリーブレイス '{' を表示するには Python>str.format()はカールが使えない