f-stringの詳細
f-stringについて
ここでは、f-string で出力する例をもう少し具体的に説明することにしましょう。
単順な例
f-string では文字列内で "{Variable}" のように変数を中括弧で囲むと、その値で置換してくれます。
code:python
In 2: # %load hello_jack.py ...: name="Jack"
...: age="59"
...: print(f"Hello, {name}. You are {age}.")
...:
...:
Hello, Jack. You are 59.
Pythonの文法上は f"..." は大文字Fで指定しても問題はありません。
code: python
In 3: print(F"Hello, {name}. You are {age}.") Hello, Jack. You are 59.
一般的に f-string と称されることから小文字が使うことが多いです。
f-stringのエスケープ
f-stringの中で中括弧をそのまま出力したいときは、次のように中括弧を2重にします。
code: python
In 2: # %load fstring_escape.py ...: f"f-string では {{}} の中が評価されて置換されます。"
...:
Out2: 'f-string では {} の中が評価されて置換されます。' 式の結果で置換
f-string では中括弧の中に式を記述することができます。その場合、その結果で置換されます。
code: python
Python3.8以降ではf-stringの中括弧に記述したイコール記号(=)は、その式と評価した結果で置換してくれます。
つまり、上記の例は単に次のように記述することができます。
code: python
文字列メソッドの呼び出した結果を置換
f-string の中括弧の中に記述したオブジェクトのメソッドを指定することもできます。
code: python
In 5: f"Hello, {name.upper()}" 関数の実行結果を置換
f-string の中括弧の中には関数も記述することができます。
code: python
In 2: # %load hello_jack_with_func.py ...: def to_upper(data):
...: return data.upper()
...:
...: name="Jack Bauer"
...: f"Hello, {to_upper(name)}"
...:
Out2: 'Hello, JACK BAUER' オブジェクトの評価で置換
f-stringでの中括弧には変数だけでなくオブジェクトを与えることもできます。つまり、オブジェクトのクラス定義で特殊メソッド__str__()と__repr__()が定義されていれば、オブジェクトをそのままf-stringの中括弧に記述することができます。
f-stringはデフォルトでは __str__()メソッドを呼び出した結果で置換を行います。
code: python
In 2: # %load fstrinfs_class.py ...: class User:
...: def __init__(self, first_name, last_name):
...: self.first_name = first_name
...: self.last_name = last_name
...:
...: def __str__(self):
...: return f"Hello, {self.first_name} {self.last_name}."
...:
...: def __repr__(self):
...: return f"{self.first_name} {self.last_name}."
...:
...: user = User('Jack', 'Bauer')
...: f"{user}"
...:
Out2: 'Hello, Jack Bauer.' __repr__()の結果で置換させたい場合は次のように!rを付加して記述します。
code: python
辞書の内容で置換
辞書でも同じように置換してくれます。
code: python
In 2: # %load fstring_dict.py ...: people = {
...: 'name': 'Jack Bauer',
...: 'organization': 'CTU'
...: }
...:
...: print(f"{people}")
Jack Bauer of CTU
"{'name': 'Jack Bauer', 'organization': 'CTU'}"
複数のf-string
複数行のf-stringをまとめて出力したいときはカッコ((...))でひとつの変数に束ねることができます。
code: python
In 2: # %load multiline_fstring.py ...: first_name = 'Jack'
...: last_name = 'Bauer'
...: organization = 'CTU'
...:
...: people = (
...: f'FirstName: {first_name}\n'
...: f'LastName: {last_name}\n'
...: f'Organization: {organization}'
...: )
...:
...: print(people)
...:
FirstName: Jack
LastName: Bauer
Organization: CTU
f-StrtingでDateTimeオブジェクトから日時文字列に変換
f-String を使うと、strftime()を呼び出さなくても、DateTimeオブジェクトから日時文字列に変換することができます。
code: python
In 2: # %load datetime_fstring.py ...: import datetime
...:
...: x = datetime.datetime(1962, 1, 13)
...:
...: print(x)
...: print(f'{x:%Y-%m-%d %H:%M:%S}')
...:
1962-01-13 00:00:00
1962-01-13 00:00:00
f-stringでの浮動小数点
f-stringで浮動小数点を扱うとき、小数点以下何桁までを出力するかを指定することができます。
code: python
In 2: # %load fstring_float.py ...:
...: pai = 3.1415926
...: val = 0.12
...: print(f'{pai:0.3f}')
...: print(f'{val:0.4f}')
...:
3.142
0.1200
f-stringでの数値表記
f-stringで中括弧の中でコロン(:)に続けて数値表記を指定することができます。
code:python
In 2: # %load fstring_numeric_notation.py ...: val = 1_000_000_000
...:
...: print(f'{val}')
...: print(f'{val:e}')
...:
...: val = 8
...: print(f'{val:o}')
...:
...: val = 16
...: print(f'{val:x}')
...:
...: val = 3
...: print(f'{val:b}')
...:
1000000000
1.000000e+09
10
10
11
f-stringの出力幅指定
f-stringで中括弧の中に変数:幅の書式で出力幅を指定することができます。
幅指定で02にように与えると数値の場合ゼロ埋めをしてくれます。
code: python
In 2: # %load fstring_width.py ...:
...: x = 1
...: y = 22
...: z = 333
...: print(f'|{x:02}|{y:3}|{z:5}|')
...:
|01| 22| 333|
f-stringでの整列指定
f-stringで整列指定を行うことができます。コロン(:)に続けて整列指定(<,^,>)と幅指定を行います。
code: python
In 2: # %load fstring_justify.py ...: x = 'a'
...: y = 'ab'
...: z = 'abc'
...:
...: print(f' 右寄せ: |{x:>10}|')
...: print(f' 左寄せ: |{y:<10}|')
...: print(f'センタリング: |{z:^10}|')
...:
右寄せ: | a|
左寄せ: |ab |
センタリング: | abc |