この記事は、【Python3.6~】f-stringsを使おう - 暇つぶし? それは違う、私にとっては生き甲斐なんだよ...のアーカイブです。
Python3.6より、str
に変数を埋め込む方法として、f-stringsが追加されました。
日本語で言うと、 フォーマット済み文字列リテラルとなります。
Python3.6未満のバージョンでは、str.format()
や、%
記号を用いることで同じような振舞いを実現できていました。今回は、それらとf-stringsの違いと、使い方を書いていこうと思います。
目次
書き方
f-stringsは以下のように記述します。
>>> a = 1 >>> b = 2 >>> print(f'{a} + {b} = {a + b}') 1 + 2 = 3
使い方は簡単で、str
のリテラルの前にf
をくっつけること(f''
)で、ただのstr
がformatted stringsになります。
変数の埋め込みは{変数}
で行います。
上の例を見ると、{a}
と{b}
がそれぞれ1
と2
に置き換わって出力されていることがわかります。
また、{a + b}
が3
になっていることにお気づきでしょうか?
{}
の中には式文(expression_stmt)を入れることができるので、a + b
という式を評価した値を出力することになります。
もちろん、関数を呼び出すことも可能なので、以下のようなこともできます。
>>> print(f'{a} + {b} = {print(a + b)}') 3 1 + 2 = None
上の場合、print()
は2回呼び出されています。
最初のprint()
を実行する際に、f'{a} + {b} = {print(a + b)}'
を評価します。3つの式文の中でも、{print(a + b)}
を評価する際にprint(a + b)
を実行するため、先に、3
を出力します。そして、print()
はNone
を返す為、1+2の答えはNone
になるわけです。
書式指定
f-stringsでも、str.format()
と同様に、書式指定ができます。(当たり前)
例を以下に示します。
>>> a = 0.1 >>> b = 0.02 >>> c = 0.003 >>> print(f"{a} + {b} + {c} = {a + b + c}") 0.1 + 0.02 + 0.003 = 0.12300000000000001 >>> print(f"{a} + {b} + {c} = {a + b + c :.2}") 0.1 + 0.02 + 0.003 = 0.12
{}
の中の式文の後に:
を付けることで、書式の指定が可能です。
上の例だと、{a + b + c :.2}
とすることで、小数点以下2桁を丸めています。
改行
f-stringsを定義する上で、1行がとても長くなってしまった場合、以下の方法で、見た目上の改行ができます。(て言ってもこれは)str
に言えることなのですが
>>> a = 1 >>> b = 2 >>> c = 3 >>> print(f"これは{a}行目" ... f"これは{b}行目" ... f"これは{c}行目") これは1行目これは2行目これは3行目
既存の方法との比較
歴史的には、%
記法、str.format()
、f-stringsの順に登場しています(確か)。
%
記法
この方法は、C言語のprintf()
に似ています。str
の埋め込みたい場所に、%d
や%s
のフォーマット指定子を埋め込み('%d + %d = %d'
の部分)、そのstr
と、埋め込むオブジェクトを%
でつなぐことで実現できます。
>>> print('%d + %d = %d' % (1, 2, 3)) 1 + 2 = 3
str.format()
この方法は、str
のメソッドformat()
を呼び出しています。
str
の埋め込みたい場所に、{}
を埋め込み、.format()
の引数に式文を指定することで実現できます。
%
記法に比べて、型をしていしなくて良いというメリットがあります。
>>> print('{} + {} = {}'.format(1, 2, 3)) 1 + 2 = 3
f-strings
f-stringsは上に記述した通りですが、str.format()
に比べて、直感的に記述できるというメリットがあります。
おわりに
f-stringsは直感的にstr
に変数を埋め込むことができます。今までstr.format()
を利用していた方も、ぜひ、利用を検討してください。