Python 3 で文字列の中に変数の値を展開するには、str.format()
を使う方法と、%
演算子を使う方法があります。
Python 3 の開発当初は %
演算子を使った方法は deprecated(廃止予定)となっていましたが、今はそのような話はなくなったようです。
%
演算子を使ったほうが簡潔に書けることが多いので、残したいという要望が多かったのでしょうね。
文字列の中に {}
というプレースホルダを含んでおくと、format
メソッドでその位置に値を挿入することができます。
print('I am {}'.format('Maku')) #=> I am Maku
任意の数のプレースホルダを含むことができます。
print('{}+{}={}'.format(1, 2, 1+2)) #=> 1+2=3
プレースホルダにインデックスを含めると、format
のパラメータで指定した値のうちどの場所のパラメータを参照するかを指定できます。
print('{0}+{0}={1}'.format(1, 1*2)) #=> 1+1=2
print('{:.5f}'.format(1.23456789)) #=> 1.23457
print('{:.0f}'.format(1.50)) #=> 2
print('{:,}'.format(1234567890)) #=> 1,234,567,890
print('{:b}'.format(255)) #=> 11111111
print('{:o}'.format(255)) #=> 377
print('{:x}'.format(255)) #=> ff
print('{:X}'.format(255)) #=> FF
print('{:10}'.format(123)) #=> ' 123'
print('{:<10}'.format(123)) #=> '123 '
print('{:>10}'.format(123)) #=> ' 123'
print('{:^10}'.format(123)) #=> ' 123 '
print('{:10}'.format('ABC')) #=> 'ABC '
print('{:<10}'.format('ABC')) #=> 'ABC '
print('{:>10}'.format('ABC')) #=> ' ABC'
print('{:^10}'.format('ABC')) #=> ' ABC '
数値はデフォルトで右寄せ、文字列はデフォルトで左寄せになります。
print('{}-{:02}-{:02}'.format(2019, 5, 7)) #=> 2019-05-07
print('{:08b}'.format(127)) #=> 01111111
print('{:08x}'.format(127)) #=> 0000007f
print('{:<08x}'.format(127)) #=> 7f000000
print('{hour:02}時{min:02}分{sec:02}秒'.format(hour=23, min=45, sec=0)) #=> 23時45分00秒
文字列に対して %
演算子を使用すると、C 言語の printf
的なフォーマットで値の展開を行うことができます。
print('I am %s' % 'Maku') #=> I am Maku
複数の値を展開するときは、%
の右側にタプルで指定します。
print('%d + %d = %d' % (1, 2, 1+2)) #=> 1 + 2 = 3
print('%.5f' % 1.23456789) #=> 1.23457
桁数の指定をパラメータにすることもできます。
print('%.*f' % (5, 1.23456789)) #=> 1.23457
print('%.f' % 1.50) #=> 2
print('%d-%02d-%02d' % (2019, 5, 7)) #=> 2019-05-07
print('%08x' % 127) #=> 0000007f
print('%10d' % 123) #=> ' 123'
print('%10s' % 'ABC') #=> ' ABC'
print('%-10d' % 123) #=> '123 '
print('%-10s' % 'ABC') #=> 'ABC '
数値も文字列もデフォルトで右寄せになります。
print('%(year)d-%(month)02d-%(day)02d' % {'year':2019, 'month':5, 'day':7}) #=> 2019-05-07