Python - print 関数と format 関数

Python2 と Python3 の print の違い

Python2 では print 文ですが、Python3 では print 関数になります。Python2 の print 文を Python3 で実行すると SyntaxError が発生します。Python2 の print 文を Python3 の print 関数に修正するためには () で囲んでください。

print xxx   # Python2
print(xxx)  # Python3
Python2 と Python3 の print の違い

Python3 では Python2 の print 文が廃止された理由は、Python の仕様をまとめたドキュメントである PEP3150 の中で以下のように述べられています。

  • 関数で実装できるものを構文にしている print 文が例外的な存在になっているから。
  • print 関数を他の関数に置き換えたいときに文字列の置き換えで済むから。
  • print 文のような特殊なシンタックスは文法をこれから拡張するときの障壁になるから。
  • print 文で複数オブジェクトを表示するとき区切り文字列を簡単に指定できないから。(関数だと sep 引数で区切り文字を指定できる。)

このページでは Python3 の print 関数について説明します。

print 関数

文字列や数値を print 関数の引数として渡すと、その値が出力されます。リストや辞書型の場合は、全体が出力されます。

print('hello, world')
# hello, world

print(100)
# 100

print([0, 1, 2])
# [0, 1, 2]

print({'a': 0, 'b': 1, 'c': 2})
# {'a': 0, 'b': 1, 'c': 2}
print 関数によるオブジェクトの出力

print 関数では、文字列はそのまま出力されます。それ以外の型がどのような文字列として出力されるかはそれぞれの型の __str__() メソッドで定義されています。

例えば、print 関数に文字列型 '1.00000' を渡すとそのまま出力されますが、浮動小数点 float1.00000 を渡すと 1.0 と出力されます。ただし、format() 関数を使用することで float 型でも小数点以下の桁数を指定して出力できます。format() 関数の詳細については後述します。

print('1.00000')
# 1.00000

print(1.00000)
# 1.0
print 関数によるオブジェクトの出力

print 関数では、デフォルトで文字列のあとに改行を含みます。改行を行いたくない場合は、引数 end に空文字列を追加します。

print('foo', end='')
print('bar')
# foobar
print 関数によるオブジェクトの出力

また、引数 end には終端文字を自由に指定することができます。

print('foo', end=', ')
print('bar')
# foo, bar
print 関数によるオブジェクトの出力

print 関数の引数に複数の変数、および文字列や数値などを指定すると、スペースで区切られて出力されます。

i = 100
print('apple', i, 0.123)
# apple 100 0.123
print 関数によるオブジェクトの出力

引数 sep を指定した場合、区切り文字をデフォルトのスペースから任意の文字列に変更できます。引数 sep には、改行文字 \nを指定することもできます。

i = 100
print('apple', i, 0.123, sep=',')
# apple,100,0.123

print('apple', i, 0.123, sep='\n')
# apple
# 100
# 0.123
print 関数によるオブジェクトの出力

format 関数

文字列関数 format()を使用すると、文字列中の置換フィールド {} が引数に指定した変数で置換されます。変数が複数ある場合は , で区切って指定することができます。

# 文字列.format(変数) の形式で指定します
s = 'Alice'
i = 25

print('Alice is {} years old'.format(i))
# Alice is 25 years old

print('{} is {} years old'.format(s, i))
# Alice is 25 years old
format 関数を使った出力

文字列中の置換フィールド {} にインデックスを付与することで、引数の順番に応じた値が置換されます。

s = 'Alice'
i = 25

print('{0} is {1} years old / {0}{0}{0}'.format(s, i))
# Alice is 25 years old / AliceAliceAlice
format 関数を使った出力

文字列の先頭に f を付与した場合、文字列中の置換フィールド {} に変数を直接指定できます。ただし、この文字列を使用する場合は、Python 3.6 以上である必要があります。この文字列は、f 文字列 (f-strings、フォーマット文字列、フォーマット済み文字列リテラル) と呼ばれます。

s = 'Alice'
i = 25

print(f'{s} is {i} years old')
# Alice is 25 years old
format 関数を使った出力

文字列中の {} を置換フィールド {} ではなく、通常の括弧として扱いたい場合は、{{, }} としてエスケープします。

print('{} is {} years old / {{xxx}}'.format(s, i))
# Alice is 25 years old / {xxx}
format 関数を使った出力

format() 関数を指定した文字列や、f 文字列の置換フィールド {} 内に書式指定文字列を指定した文字列は、数値を任意の書式にフォーマットして出力できます。

{:書式指定文字列} のように : のあとに書式化文字列を記述します。置換フィールドにインデックスや、名前を指定する場合は、そのあとに :書式指定文字列 を記述します。

number = 0.45
print('{0:.4f} is {0:.2%}'.format(number))
# 0.4500 is 45.00%

print(f'{number:.4f} is {number:.2%}')
# 0.4500 is 45.00%
format 関数を使った出力

書式指定文字列によって様々なフォーマットにすることが可能です。

i = 255

print('left   : {:<8}'.format(i))   # left    : 255        (スペース埋め8桁で左寄せ)
print('center : {:^8}'.format(i))   # center  :   255      (スペース埋め8桁で中央寄せ)
print('right  : {:>8}'.format(i))   # right   :      255   (スペース埋め8桁で右寄せ)
print('zero   : {:08}'.format(i))   # zero    : 00000255   (0埋め8桁)
print('bin    : {:b}'.format(i))    # bin     : 11111111   (2進数)
print('oct    : {:o}'.format(i))    # oct     : 377        (8進数)
print('hex    : {:x}'.format(i))    # hex     : ff         (16進数)

f = 0.1234

print('digit   : {:.2}'.format(f))  # digit   : 0.12       (小数点以下2桁)
print('digit   : {:.6f}'.format(f)) # digit   : 0.123400   (小数点以下6桁で0埋め)
print('exp     : {:.4e}'.format(f)) # exp     : 1.2340e-01 (指数表記)
print('percent : {:.0%}'.format(f)) # percent : 12%        (パーセント表記)
format 関数を使った出力

上記の例は format() 関数ですが、f 文字列でも同様の書式指定文字列が使用できます。

format() 関数と類似した出力仕様に変換指定子 (%d%s などの文字列フォーマット) があります。ただし、Python3 では format() 関数を使った方が好ましいとされています。

関連記事

Python 全体の仕様を体系的にまとめたページは、プログラミング Python 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
311
Shares:
3
Tag:
Python