Pythonの f文字列(フォーマット済み文字列リテラル/f-strings)は、Python 3.6から導入された文字列フォーマットの方法です。
文字列の中に変数や式を埋め込んで書くことができ、簡潔で読みやすいコードが書けるのが特徴です。
今回は、初心者の方向けに分かりやすくf文字列の使い方を解説します。
【はじめに】文字列のフォーマットとは
はじめに、そもそも文字列のフォーマットとはどのようなものかを簡単に解説します。
上記の例では、文字列内の{}にformat()メソッドを使って値を埋め込んでいます。
Pythonのf文字列とは
Pythonの f文字列(フォーマット済み文字列リテラル/f-strings)は、Python 3.6から導入された文字列のフォーマット機能です。
従来は、fotmat()メソッドを用いて文字列をフォーマットすることが一般的でしたが、f文字列はformat()よりも簡単な記述で行えるようになっています。
Pythonのf文字列の使い方
Pythonのf文字列の使い方は以下の通りです。
【使用例1】変数の値を {} に代入する
name = "相葉"
age = 41
print(f"私は{name}です。{age}歳です。")
# 出力: 私は相葉です。41歳です。
変数名を {}の中に記述すると、その場所に変数の値が入ります。print文を見ても、どこに何を出力するのか一目で分かって便利ですね。
【使用例2】式(計算結果)を埋め込む
x = 5
y = 10
print(f" {x} と {y} の合計は {x + y} です。")
# 出力: 5 と 10 の合計は 15 です。
計算式を直接埋め込むことができるため、デバッグした際の見やすさも各段に向上します。
【使用例3】数値のフォーマット指定(小数点の桁数など)
value = 123.456789
print(f"小数点2桁まで表示した値: {value:.2f}")
# 出力: 小数点2桁まで表示した値: 123.46
上記の例は、小数点の桁数を2桁までにフォーマットした例です。
【使用例4】文字列の右寄せ・左寄せ・中央寄せ
name = "Hello"
print(f"結果:{name:>10}") # 幅10で右寄せ
print(f"結果:{name:<10}") # 幅10で左寄せ
print(f"結果:{name:^10}") # 幅10で中央寄せ
# 出力:
結果: Hello
結果:Hello
結果: Hello
- 右寄せ:幅10の中で文字列”Hello”が右寄せされ、左側に5つの空白が追加されます。
- 左寄せ:幅10の中で文字列
"Hello"
が左寄せされ、右側に5つの空白がされます。 - 中央寄せ:幅10の中で文字列
"Hello"
が中央寄せされ、左右に空白が均等に配置されています(左右に2つずつ空白)
【使用例5】0埋め(ゼロパディング)
number = 42
print(f"{結果:03d}") # 幅3でゼロ埋め。
print(f"{結果:05d}") # 幅5でゼロ埋め。d:整数(Decimal ※省略可)
# 出力: 結果: 042
結果: 00042
dは整数(Decimal )を表し、省略可能です。
f"{数値:0N}" # Nは桁数
のように指定します。
【使用例6】条件式の埋め込み(三項演算子)
- 基本的な使い方
age = 20
print(f"私は{'大人です' if age >= 18 else '未成年です'}。")
# 出力: 私は大人です。
- リストが空かどうかを判定
items = []
print(f"リストは {'空' if not items else '空でない'}です。")
# 出力: リストは空です。
【使用例7】関数の結果を埋め込む
def greet(name):
return name.upper()
name = "二宮"
print(f"こんにちは、{greet(name)}さん!")
# 出力:こんにちは、二宮さん!
関数を呼び出して、その結果を埋め込むことができます。
【使用例8】数値を2進数・8進数・16進数で表示
数値を2進数・8進数・16進数で表示することも可能です。
# 数値
num = 255
# 10進数で表示
print(f"10進数: {num}")
# 2進数で表示
print(f"2進数: {num:b}")
# 8進数で表示
print(f"8進数: {num:o}")
# 16進数で表示(小文字)
print(f"16進数: {num:x}")
# 出力:
10進数: 255
2進数: 11111111
8進数: 377
16進数: ff
16進数の出力結果を大文字で表示したい場合は、
print(f"16進数: {num:X}")
と、xを大文字にします。
【使用例9】数値のパーセント表示
数値をパーセンテージ形式で表示できます。
value = 0.75
print(f"パーセント表示: {value:.1%}")
# 出力: パーセント表示: 75.0%
{value:.n%} の値を変更することで、表示する桁数を変更することも可能です。
value = 0.75
# 小数点以下0桁
print(f"パーセント表示(小数点以下0桁): {value:.0%}")
# 小数点以下2桁
print(f"パーセント表示(小数点以下2桁): {value:.2%}")
# 1未満の数値
small_value = 0.0075
print(f"パーセント表示(1未満の数値): {small_value:.2%}")
# 出力
パーセント表示(小数点以下0桁): 75%
パーセント表示(小数点以下2桁): 75.00%
パーセント表示(1未満の数値): 0.75%
【使用例10】リストや辞書(Dictionary)の使用
リストや辞書を使って、動的に内容を変えたいときにも便利です。
- リストの例
names = ["相葉", "松本", "二宮"]
for name in names:
print(f"こんにちは、{name}さん!")
# 出力:
# こんにちは、相葉さん!
# こんにちは、松本さん!
# こんにちは、二宮さん!
- 辞書(Dictionary/dict)の例
data = {"name": "相葉", "age": 41}
# fフォーマットを使って辞書の値を表示
print(f"私は{data['name']}という名前で、{data['age']}歳です。")
# 出力:
私は相葉という名前で、41歳です。
【使用例11】日付のフォーマット
日付や時間もf文字列を使って表示できます。
from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# 1. 年月日を表示
print(f"今日は{now.year}年{now.month}月{now.day}日です。")
# 2. 時刻を表示(時:分:秒)
print(f"現在の時刻は{now.hour}時{now.minute}分{now.second}秒です。")
# 3. フルフォーマットの日付と時刻
print(f"現在の日時: {now:%Y-%m-%d %H:%M:%S}")
# 4. 12時間表記(AM/PMを含む)
print(f"12時間表記: {now:%Y-%m-%d %I:%M:%S %p}")
# 5. 日付だけをカスタム形式で表示
print(f"日付(カスタム形式): {now:%d/%m/%Y}")
# 6. 時刻だけをカスタム形式で表示
print(f"時刻(カスタム形式): {now:%H:%M}")
# 出力:
今日は2024年11月26日です。
現在の時刻は14時35分50秒です。
現在の日時: 2024-11-26 14:35:50
12時間表記: 2024-11-26 02:35:50 PM
日付(カスタム形式): 26/11/2024
時刻(カスタム形式): 14:35
【使用例12】=指定子で変数名と値を同時に出力(デバッグに便利!)
この機能は、Python 3.8以降で使えます。
- =指定子 を使わない場合
【 =指定子 を使わない場合】
name = "相葉"
age = 41
print(f"私は{name}です。{age}歳です。")
# 出力: 私は相葉です。41歳です。
- =指定子 を使った場合
【 =指定子 を使った場合】
name = "相葉"
age = 41
print(f"{name=}, {age=}")
# 出力: name='相葉', age=41
=指定子を使うことで、出力時に変数名まで出力されます。
式の指定にも使えるのでデバッグに便利
また、変数だけでなく式の指定もでき、計算式の結果が表示されデバッグ時に便利です!
a = 10
b = 20
print(f"{a + b=}")
# 出力: a + b=30
fotmat()とf文字列の違い
【比較1】記述方法の違い
format()は、文字列の中に{}を置き、後から.format()で埋め込む値を指定します。
f-stringsは、文字列の前にfを付けて、{}の中に直接変数や式を書きます。
【比較2】書式指定の比較
例1:小数点以下の桁数の指定
- format()
value = 123.456789
print("小数点2桁まで表示: {:.2f}".format(value))
#出力結果:小数点2桁まで表示: 123.46
- f文字列
value = 123.456789
print(f"小数点2桁まで表示: {value:.2f}")
#出力結果:小数点2桁まで表示: 123.46
例2:0埋め(ゼロパディング)
- format()
number = 42
print("0埋め後の値: {:05d}".format(number))
#出力結果:0埋め後の値: 00042
- f文字列
number = 42
print(f"0埋め後の値: {number:05d}")
#出力結果:0埋め後の値: 00042
まとめ
本記事では、Pythonのf文字列(フォーマット済み文字列リテラル/f-strings)について、使い方やformat()の違いなどを解説しました。
従来のformat()よりも、コードの可読性が向上し、デバッグ時にもより楽でメンテナンス性も向上します。
是非、開発時に活用してみてください。
コメント