【Python】print f を使いこなす方法を初心者向けに丁寧に解説

はじめに

皆さんはPythonで文字列や変数の内容を表示するときに、どのような方法を使っているでしょうか。
文字列結合やformat()メソッド、従来の%演算子など、さまざまな方法が存在します。
その中でも、f-string は読み書きのしやすさと柔軟性が魅力といえます。

f-stringを使うと、コードがシンプルになり、可読性が高まります。
慣れるまでは「あれ、ここで波括弧は正しいんだっけ?」と迷うこともあるかもしれませんが、慣れれば直感的に扱えるようになるはずです。

本記事では、Python print fというキーワードで想定される内容、つまりf-stringの使い方から実務での活用シーン、さらに複雑なフォーマットまで幅広く紹介します。
初心者の方でも理解しやすいように、具体的なコード例を丁寧に示していきます。

この記事を読むとわかること

  • f-stringとはどのような仕組みで、何が便利なのか
  • print文と組み合わせた活用方法
  • 具体的な書式指定と、そのメリット
  • 実務での活用シーンや、他のフォーマット手法との違い
  • 使う際に気をつけるべき注意点

以上を押さえることで、Pythonでの文字列操作がよりスムーズになり、読みやすく管理しやすいコードが書けるようになるでしょう。

f-stringとは何か

f-stringとは、Pythonの文字列リテラルの前にfを付けることで、文字列の中に直接変数や式を埋め込める仕組みを指します。
たとえば、変数nameageがある場合、f"Hello, {name}. You are {age} years old." のように書くだけで、スッキリした出力が得られます。

これまでの文字列フォーマットとの違い

f-stringが登場する以前は、文字列を連結するために+演算子を使ったり、format()メソッド、あるいは従来の%演算子(C言語由来の書式指定)を使ったりしていました。
いずれの方法にも一長一短がありますが、f-stringの強みは以下のような点にあります。

  • 文字列の中に {} を使って直接変数や式を埋め込める
  • コードがコンパクトになり、可読性が高まる
  • format()を使った場合の引数の順番や%演算子のフォーマット指定などを気にしなくてよい

f-stringの基本的な使い方

f-stringは、文字列を囲むクオートの前にfを付け、波括弧 {} の中に埋め込みたい変数や式を記述するだけで動作します。
たとえば、以下のようなコードが考えられます。

name = "Alice"
score = 85

message = f"こんにちは、{name}さん。スコアは{score}点です。"
print(message)

実行すると、こんにちは、Aliceさん。スコアは85点です。 のような出力が得られます。

変数の埋め込み

上記の例のように、単純に変数を埋め込む場合は、{変数名}という形でOKです。
これだけでも十分便利ですが、さらに式(たとえば計算など)も埋め込める点がf-stringの大きな魅力です。

式の埋め込み

f-stringでは、変数だけでなく、簡単な演算や関数呼び出しなども括弧の中で行えます。
次の例を見てみましょう。

x = 10
y = 20
print(f"{x} + {y} = {x + y}")
print(f"大きい値は {max(x, y)} です")

ここでは、{x + y}{max(x, y)} のように、式や関数呼び出しを直接書いています。
このように書くことで、コードを追いやすくなり、デバッグするときにも一連の処理を直感的に理解しやすいです。

実務での活用シーン

f-stringはコードを短くするだけでなく、実務でも多くの場面で利用されます。
単純に文字列を表示するだけでなく、ログ出力やユーザー向けメッセージ作成にも大いに役立ちます。

ログやデバッグ出力での活用

アプリケーションを開発していると、ログを大量に出力する場面があります。
たとえば「どの関数がいつ呼ばれたか」「変数の中身は何か」といった情報が必要になることもあるでしょう。

def process_data(user_id, data):
    print(f"Starting process for user_id={user_id}")
    # データ処理のロジック
    print(f"Finished processing. Data size: {len(data)}")

このようにf-stringを用いることで、ログの内容が一目で分かりやすくなります。
また、ログに時刻を埋め込む、条件付きで追加情報を表示するといった拡張も簡単です。

ユーザーへのメッセージ表示

CLI(コマンドラインインターフェース)やWebアプリケーションの一部で、ユーザーにメッセージを返す場面もあります。
その際に、ユーザー名や入力内容、計算結果などを動的に差し込む必要がありますよね。

f-stringなら、見た目どおりのコードで作成できるので、**“何を表示しているか”**が明確です。
メンテナンスの観点でも、将来に文字列を修正するときに、コードの可読性は非常に重要になります。

テンプレート文字列としての活用

通知メールなど、一定のテンプレートに従って文面を自動生成するケースもよくあります。
このようなテンプレートをf-stringで書いておけば、変数の埋め込み位置を可視化しながら確認できます。
たとえば、以下のようなコードイメージです。

def create_notification(user_name, total_price):
    template = (
        f"{user_name} 様\n"
        f"いつもご利用いただきありがとうございます。\n"
        f"ご注文金額の合計は {total_price} 円です。\n"
        f"またのご利用をお待ちしております。"
    )
    return template

このように書くと、メール文面とコード中の記述がほぼ同じ形で表現されているため、メンテナンスがしやすいです。

f-stringの書式指定

単なる変数の埋め込みだけでなく、f-stringでは書式指定を行うことも可能です。
たとえば、数値のフォーマット、文字列の整列、日付や時刻の整形など、多彩な指定ができます。

文字列の整列

文字列を左右に揃えたい場合は、: に続けて <(左揃え)、>(右揃え)、^(中央揃え)などを指定できます。

val1 = "Apple"
val2 = "Banana"
print(f"|{val1:<10}|{val2:>10}|")

この例では、val1を左揃え、val2を右揃えにして10文字の幅を持たせています。
あらかじめ列の幅を確保したいときなどに利用されるテクニックです。

数値のフォーマット

数値を特定の桁数やカンマ区切りで表示したい場合は、{数値:書式指定} の形で指定します。
たとえば、カンマ区切りで表示したい場合は以下のように書きます。

salary = 12345678
print(f"給与: {salary:,}円")

これにより 給与: 12,345,678円 と表示できます。
桁数を合わせる必要がある場合は、{salary:08} のように指定することで、先頭をゼロ埋めした形で表示することも可能です。

浮動小数点の扱い

浮動小数点数を表示するとき、小数点以下を何桁まで表示するかというフォーマットをする場合があります。
次の例は、小数点以下2桁まで表示したいときの書き方です。

price = 123.4567
print(f"{price:.2f}")

これを実行すると、123.46 のように自動で四捨五入して表示します。

パーセンテージや指数表記

統計処理や数値解析を行う場合、パーセンテージや指数表記にしたいケースもあるでしょう。

ratio = 0.256
print(f"{ratio:.1%}")

この例では、数値を百分率の形で表示し、小数点以下1桁までに丸めます。
結果は 25.6% と表示されます。

指数表記をしたいときは、.2e のように指定すると、2.56e-01 のように出力されます。
大きな数値や小さな数値を扱うときに、有効桁数をそろえたい場合などに利用されます。

進数変換

プログラミングでは、整数を16進数や8進数などの形で表示したいことがあります。
f-stringでも、x(16進数)やo(8進数)などが使えます。

num = 255
print(f"16進数: {num:x}")
print(f"8進数: {num:o}")

この場合、16進数はff、8進数は377と表示されます。

日付や時刻のフォーマット

日付や時刻(datetimeオブジェクト)を読みやすい形に変換する場合にも利用できます。
以下のような例を見てみましょう。

from datetime import datetime

now = datetime.now()
print(f"現在時刻は {now:%Y-%m-%d %H:%M:%S} です")

このようにすると、nowのオブジェクトを年-月-日 時:分:秒の形で表示できます。
日時を扱う業務アプリケーションでは、こうしたフォーマット指定は頻繁に登場します。

f-stringの応用技術

f-stringは変数や単純な式だけでなく、応用すればさまざまな書き方ができます。
コードをさらに短くしたり、可読性を高めたりするためのテクニックをいくつか紹介します。

三項演算子や条件分岐の埋め込み

f-stringの中に、三項演算子 などの条件式を直接埋め込むことも可能です。
たとえば、点数に応じて合否を表示するような例を考えてみましょう。

score = 75
print(f"結果は {'合格' if score >= 60 else '不合格'} でした。")

このように書くことで、scoreの値に応じて合格か不合格かを分岐させられます。
複雑な条件分岐を書くと可読性が下がる場合もあるため、コードが長くなる場合は無理に1行に詰め込みすぎないようにしましょう。

辞書やリストから値を取り出す

辞書やリストの特定の要素を直接埋め込みたいときもあります。
たとえば、以下の例では辞書 person から値を取得するケースを示します。

person = {"name": "Bob", "age": 30}
print(f"{person['name']}さんの年齢は{person['age']}歳です。")

また、リストの場合も同様に、my_list[0] のように書くことができます。
ただし、ブラケットの構文が複雑にネストすると可読性が落ちるので、分割して書くか変数に一旦格納してから表示するのも1つの方法です。

f-stringを使った簡易計算

先ほどの例でも少し触れましたが、f-stringでは四則演算などの簡単な式を直接書けます。
たとえば、以下の例を見てみましょう。

a, b = 10, 3
print(f"{a} / {b} = {a / b:.2f}")

この場合、a/bの結果を小数点以下2桁まで表示するようにしています。
計算結果の一時的な表示などに便利です。

ネストや入れ子

f-stringの中に再度f-stringを書く、というようなネストは基本的に推奨されません。
書けないこともありませんが、非常に読みづらくなってしまいます。
Pythonが提供する機能としては可能であっても、可読性を最優先に考えて、ネストする場合はなるべく分割して書くほうが良いでしょう。

長い文字列の分割

長文の文字列を一度に書きたい場合、Pythonでは (""" ... """) のような三重クオートも使用できます。
ただし、三重クオートとf-stringを組み合わせると、行数が多くなるときに見通しが悪くなることがあります。

name = "Charlie"
long_text = f"""\
こんにちは、{name}さん。

この文章はとても長い文章です。
改行や空行もそのまま表現できます。

それでは、また。
"""
print(long_text)

複数行を一気に扱いたい場合は三重クオートも便利ですが、どちらかというとテンプレートファイルを外部で管理するなど、別の方法を検討したほうがいいかもしれません。

f-stringの注意点

非常に便利なf-stringですが、使い方を誤ると思わぬエラーや意図しない挙動を引き起こすことがあります。
以下のような点にはとくに気を付けましょう。

バックスラッシュや特殊文字の扱い

f-stringでは、バックスラッシュ \ に注意が必要です。
\n(改行)や\t(タブ)などをそのまま使うことはできますが、意図せずエスケープシーケンスとして動作してしまうケースがあります。

もし、バックスラッシュをそのまま出力したい場合は、エスケープ処理やraw文字列の検討が必要です。
raw文字列を使用するときは、fの前にrを付ける書き方もあります。

print(rf"ファイルパス: C:\Users\{ 'Alice' }")

ただし、raw文字列とf-stringを同時に使う場合は制限があり、末尾のバックスラッシュなどが扱えないこともあるため、必要に応じて公式ドキュメントなどで確認してください。

引用符やエスケープ

文字列の定義にシングルクオート ' ' を使うのか、ダブルクオート " " を使うのかを混在するとエラーになることがあります。
f-stringの中で ' を使いたいのに、外側も ' で囲んでいるという状況は、Pythonにとっては混乱の元です。

例えば以下はOK例です。

name = "Dave"
print(f'こんにちは、{name}さん。今日は良い天気ですね。')

逆に以下はエラーを起こす可能性があります(中に'を含むから)。

# エラーを起こす可能性のある例
# print(f'I'm {name}.')

上記の場合はダブルクオートを使うか、エスケープ \' を使うなどの対応が必要です。

パフォーマンス

f-stringは頻繁に文字列を生成する処理でも比較的軽快に動作します。
ただし、あまりに大量の連結や巨大なループでの利用は、最適な実装を検討したほうがいいでしょう。
とはいえ、通常の規模のアプリケーションやスクリプトであれば、f-stringの使用が極端にパフォーマンスを下げることは少ないです。

フォーマット時の計算コスト

{...} の中に複雑な演算や関数呼び出しを多用すると、文字列生成のたびに余計なコストがかかることがあります。
多くの場合、それほど問題にならないかもしれませんが、もし何千回、何万回と繰り返し実行されるような箇所であれば、パフォーマンス検証を行いましょう。

print関数と組み合わせたf-stringの活用例

f-stringとprint関数は相性が良く、単に文字列を表示するだけでなく、簡易のデバッグや条件付き出力などに使われます。

基本的なprint + f-stringの例

先ほどまで紹介してきた例のように、print(f"Hello, {name}") というのが最も基本的な使い方です。
複数の変数を一度に表示するときも、まとめて括弧の中に {} で埋め込めばOKです。

name = "Eve"
age = 28
height = 165.3
print(f"{name}さんは{age}歳で、身長は{height}cmです。")

複数行の出力

出力したい内容が複数行にわたる場合、print関数を何度も呼び出す方法や、三重クオートで一括表示する方法があります。
f-stringでは次のような工夫もできます。

name = "Frank"
multiline = (
    f"はじめまして、{name}さん。\n"
    f"今日もいい一日になりそうですね。\n"
    f"こちらのメッセージは複数行出力の例です。"
)
print(multiline)

まとめて変数multilineに格納してからprint()しているので、可読性も高いです。

ユーザー入力を含めた例

たとえば、CLIでユーザーに何かを入力させて、その結果をf-stringで整形して表示する、という例を考えてみます。

user_name = input("名前を入力してください: ")
print(f"{user_name}さん、こんにちは。Pythonの勉強を続けると理解が深まりますね。")

こうするだけで、プログラムを実行した際にユーザーに名前を尋ね、その後の出力で動的にユーザー名が挿入されます。

他のフォーマット手法との比較

Pythonにはf-stringのほかにも、旧来からある%-formattingstr.format()が存在します。
まだこれらを使用しているコードベースも珍しくありません。
どの方法にも長所と短所があるため、状況に応じて使い分けが必要です。

%-formattingとの比較

昔からある書き方として、C言語風の書式指定である%演算子が使われることがあります。
例えば、以下のようなイメージです。

name = "Gina"
age = 22
message = "Hello, %s. You are %d years old." % (name, age)
print(message)

この方式は慣れた人にとってはコンパクトですが、フォーマット指定子や引数の順番を間違えやすい点があります。
また、文字列中に挿入する変数の数が増えるほど、可読性が下がりがちです。

str.format()との比較

もう一つは、str.format()メソッドを用いる方法です。
たとえば、以下のような書き方が一般的でした。

name = "Hank"
age = 40
message = "Hello, {}. You are {} years old.".format(name, age)
print(message)

引数の順序を {0}, {1} のように指定できたり、キーワード引数を使って {name} のように書けたりと、当時としては利便性が高い方法でした。
しかし、f-stringが登場してからは、直接 {変数名} を書けるという利便性によって、f-stringが優先されることが増えています。

それぞれの使い分けの観点

  • コードの可読性: f-stringが最も直感的で可読性が高い
  • 互換性: 非常に古い環境(f-stringのない環境)ならformat()%を使う必要がある場合もある
  • 複雑な書式: format()%の書き方に慣れている場合、細かい設定が頭に入っているならそちらを使うことも

ただ、現在学ぶのであれば、f-stringを使用するのが主流という認識で問題ありません。

この記事を読むにあたっての補足

ここまでf-stringやprint関数との組み合わせについて解説してきました。
もう少し実装面で押さえておきたい点をいくつか補足します。

Python環境の用意

Pythonを使うには、パソコンにPythonがインストールされている必要があります。
WindowsでもmacOSでも、公式サイトからダウンロードするか、OSによっては最初からPythonが入っている場合もあります。
インストール後は、コマンドプロンプトやターミナルから python コマンドを入力して起動するだけです。

OSによる差異

PythonはWindows、macOS、Linuxなど、さまざまなOSで動作します。
f-stringやprintの動作そのものがOSによって大きく異なることはありません。
ただし、改行コードなど、一部環境固有の差はあるため、あらかじめ理解しておくとスムーズかもしれません。

エディタやIDEの使い方

エディタやIDEによっては、f-stringを入力するときに自動補完機能やシンタックスハイライトが働き、さらに記述をしやすくしてくれます。
とくにPythonに特化したIDEでは、変数や関数の候補が出るため、プログラムの保守やリファクタリングにおいても効率が上がるでしょう。

まとめ

Pythonで文字列を扱う上で、f-stringは非常に便利な選択肢といえます。
文字列中に変数や式を直感的に埋め込めるため、コードの可読性や保守性を高めてくれます。

  • 変数や式を{}で埋め込むだけで利用可能
  • ログやデバッグ、メッセージ生成など、さまざまな場面で有用
  • 書式指定を使うことで数値や日付の表示を柔軟に制御できる
  • 従来の%演算子やstr.format()よりも直感的でミスが少ない

ただし、大規模な文字列生成や複雑な条件分岐を多用する場合は、可読性を損なわないよう工夫する必要もあります。
どの方法にも一長一短があるため、チームのコーディング規約や既存コードとの整合性を考えながら選択するとよいでしょう。

Pythonでの文字列出力やフォーマットに悩んでいる方は、ぜひf-stringを試してみてください。
きっと、コードの見通しがよくなり、プログラミングがより楽しくなるはずです。

f-stringはシンプルかつ読みやすい記法なので、少し練習すればすぐに身につくでしょう。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。