閉じる

【Python】f-stringで変数名と値を同時出力 f'{var=}’の使い方

デバッグ中に変数の「名前」と「中身」を素早く確認できると原因調査がぐっと楽になります。

Python 3.8以降では、f-stringのデバッグ表記を使うと変数名=値の形で自動出力が可能です。

本記事では、f'{var=}'の基本から、見やすく整える書式指定、注意点やベストプラクティスまで、初心者の方にもわかりやすく丁寧に解説します。

f-stringの基礎とf'{var=}’とは?

f-stringは文字列の中で{式}の形で値を埋め込める機能です。

Python 3.8で追加されたf'{expr=}'という書き方を使うと、式そのものと、その評価結果を「expr=value」の形で一緒に表示できます。

Python 3.8+の「変数名=値」自動表示

デバッグ用の短記法として、例えばf'{x=}'x=10のように自動で「x=」を付けて表示します。

デフォルトではrepr表現(!r)が使われるため、文字列なら引用符付きで表示され、構造がわかりやすくなります。

Python
# Python 3.8+ で動作します
x = 10
s = "hello"
print(f'{x=}')
print(f'{s=}')  # repr相当なので、文字列はクォート付きで出ます
実行結果
x=10
s='hello'

printデバッグを短く書ける理由

通常、変数名と値を両方出したい時はprint('x=', x)などと2つ以上の引数を書きますが、f'{x=}'を使えば1箇所にまとめて可読性を保てるうえ、式やインデックスもそのまま書けるのが大きな利点です。

基本の使い方(初心者向け)

まずは「変数1つ」「複数」「式や属性・インデックス」の3パターンを順に確認します。

変数1つを表示する

最も基本的な書き方はf'{変数名=}'です。

デフォルトはreprなので文字列にはクォートが付きます。

Python
# 変数1つをデバッグ出力
age = 24
name = "Alice"
print(f'{age=}')
print(f'{name=}')
実行結果
age=24
name='Alice'

複数の変数をまとめて表示する

カンマ区切りで並べるだけです。

スペースの有無もそのまま出力に反映されます。

Python
# 複数の変数をまとめて
a, b, c = 1, 2, 3
user = "bob"
print(f'{a=}, {b=}, {c=}, {user=}')
print(f'{a=}, {b = }, {user = }')  # = の前後にスペースを入れると、そのまま出力されます
実行結果
a=1, b=2, c=3, user='bob'
a=1, b = 2, user = 'bob'

式や属性・インデックスも表示できる

変数だけでなく任意の式や属性、インデックスアクセスも書けます。

表示される左側は「式そのもの」なので、何を評価したのかが明確です。

Python
# 式、属性、インデックスの表示例
nums = [2, 4, 8]
user = {"name": "Carol"}

class Box:
    def __init__(self):
        self.values = [10, 20, 30]

box = Box()

print(f'{nums[0]=}')
print(f'{sum(nums)/len(nums)=}')
print(f'{user["name"].upper()=}')
print(f'{box.values[1]=}')
実行結果
nums[0]=2
sum(nums)/len(nums)=4.666666666666667
user["name"].upper()='CAROL'
box.values[1]=20

書式指定で見やすくする

長い小数や文字列、複数項目の見栄えは、書式指定!r/!ssep/endの調整で整えられます。

小数点や桁数を整える(例: :.2f)

f'{expr=:書式}'の形で、右辺の値に書式を適用できます。

書式がある場合はreprではなくフォーマット結果が使われます。

Python
# 小数点以下2桁で丸める
import math
pi = math.pi
ratio = 7 / 3

print(f'{pi=:.2f}')           # 2桁
print(f'{ratio=:>8.3f}')      # 右寄せ・幅8・小数3桁
print(f'{1234567=:,}')        # 3桁区切り
実行結果
pi=3.14
ratio=   2.333
1234567=1,234,567

よく使う指定

  • :.2f 小数2桁
  • :, 3桁区切り
  • :>8 幅8で右寄せ
  • :^10 幅10で中央寄せ

!rと!sの違い(表示方法の選択)

デフォルトは!rなので、文字列はクォート付きで表示されます。

!sを付けると人間が読む用のstr表現になります。

Python
# !r と !s の違い
text = "Hello\nworld"
print(f'{text!r=}')  # repr: エスケープを含む表現
print(f'{text!s=}')  # str: 実際に改行して表示
実行結果
text!r='Hello\nworld'
text!s=Hello
world

以下の表は違いの要点です。

指定使う関数特徴
なしデフォルトは!r (var=のとき)デバッグ向け。文字列はクォート付きでわかりやすい
!rrepr()デバッグ向けの厳密な表現
!sstr()人が読む用途に向く自然な表現
!aascii()非ASCII文字をエスケープした表現

長い文字列を短く出す(スライスで制限)

単純にスライスを使えばOKです。

式の左側にそのまま切り取り内容が残るので、どこまで表示したか一目でわかります。

Python
# 長い文字列の先頭30文字だけを表示
long_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 3
print(f'{long_text[:30]=}')
print(f'{long_text[:30]!s=}')  # !s にするとクォートなしで出る
実行結果
long_text[:30]='Lorem ipsum dolor sit amet, c'
long_text[:30]=Lorem ipsum dolor sit amet, c

改行や区切りを整える(printのsepやend)

複数項目を並べるときは、printsependを活用すると行を整えやすくなります。

Python
# sep と end でレイアウトを整える
x, y, z = 10, 20, 30
print(f'{x=}', f'{y=}', f'{z=}', sep=' | ', end=' <- 行末をカスタム\n')

# ログ風に時刻と値を1行で
from datetime import datetime
now = datetime(2025, 1, 23, 12, 34, 56)
print(f'{now:%Y-%m-%d %H:%M:%S}', f'{x=}', f'{y=}', sep='  ')
実行結果
x=10 | y=20 | z=30 <- 行末をカスタム
2025-01-23 12:34:56  x=10  y=20

注意点とベストプラクティス

安全に、そして効率的に使うためのポイントをまとめます。

Pythonバージョン要件(Python 3.8+)

f'{expr=}'構文はPython 3.8以降でのみ利用可能です。

古い環境ではSyntaxErrorになります。

バージョン確認はpython --version、もしくは実行時にsys.versionで確認してください。

Python
# バージョン確認の一例
import sys
print(f'{sys.version=}')
実行結果
sys.version='3.12.4 (main, Jun  7 2024, 00:00:00) [Clang 15.0.0]'

機密情報は出力しない(デバッグ時の注意)

APIキー、アクセストークン、パスワード、個人情報などの機密は、f-stringで標準出力やログに出さないようにしてください。

出力先がコンソールやCIログであっても漏洩リスクがあります。

必要なときはマスク処理やダミー値に置き換えましょう。

本番はlogging、学習や検証はprintでOK

開発初期や学習時はprint(f'{var=}')で十分ですが、本番運用ではloggingモジュールの利用を推奨します。

レベル制御や出力先の切り替え、構造化出力などが行えます。

f-stringはlogging.debug(f'{x=}, {y=}')のように併用しても構いませんが、多量出力は性能に影響するため注意してください。

Python
# logging と併用する例
import logging

logging.basicConfig(level=logging.INFO)
items = ["A", "B", "C"]
logging.info(f'{len(items)=}')
実行結果
INFO:root:len(items)=3

空白もそのまま表示される点に注意

f'{x = }'のように= の前後に入れたスペースは、そのまま出力に現れます

ログを機械処理する場合は、余計な空白を入れないことをおすすめします。

Python
x = 42
print(f'{x=}')
print(f'{x = }')  # = の前後にスペース
実行結果
x=42
x = 42

まとめ

f-stringのf'{expr=}'は、式と値を「式=値」で簡潔に出力できる強力なデバッグ機能です。

デフォルトでreprを使うため構造がわかりやすく、書式指定や!r/!ssep/endと組み合わせれば、見やすさと作業効率が大幅に向上します。

一方で、機密情報の出力は厳禁空白はそのまま出るPython 3.8+が必須といった注意点もあります。

学習や検証では積極的に活用しつつ、本番ではloggingへの移行を意識して、読みやすく安全なデバッグ出力を心がけてください。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!