Python f-string(f文字列): format, 0埋め、改行、小数点、エラー
F-stringはFormatted stringの略で、Pythonで文字列を直感的に操作したり組版チームを操作したりするための最も直感的な方法です。
この記事では、F-string の基本的な使い方と、小数点以下のフォーマット、改行、for 文、エラー処理について説明します。
1. Python での F 文字列の使い方
F文字列がPythonをどのように変えたかを紹介します。
以下の2つの変数が与えられたとき
name = "Jonn Doe"
age = 30
次のような出力を得たい場合
My name is John Doe. I'm 30 years old this year.
Pythonのデフォルトの文字列メソッドを使えば、以下のように3つの異なるメソッドを使うことができた。
str1 = "My name is " + name + ". I'm " + str(age) + " years old this year."
str2 = "My name is %s. I'm %d years old this year." % (name, age)
str3 = "My name is {}. I'm {} years old this year.".format(name, age)
# Output:
# My name is Jonn Doe. I'm 30 years old this year.
F文字列を使えば、次のように最も読みやすいコードを書くことができる。
f_str1 = f"My name is {name}. I'm {age} years old this year."
# Output:
# My name is Jonn Doe. I'm 30 years old this year.
例を見てわかるように、文字列リテラルを定義する引用符の前に f
があり、挿入する変数の値は中括弧 {}
で囲まれています。
中括弧の中には、以下のように式を挿入したり、リストのようなコンテナ型を挿入することもできます。
friends = ["Mark", "Elon"]
f_str2 = f"My name is {name}. I'm {age + 1 } years old next year. My friends are {friends}."
# Output:
# My name is Jonn Doe. I'm 31 years old next year. My friends are ['Mark', 'Elon'].
このように文字列の間に変数を挿入して出力する機能を文字列補間と呼ぶ、 と呼ばれ、最近のほとんどのプログラミング言語でサポートされています。
F-stringsは文字列補間をサポートするPythonの方法です。
F-stringsの基本的な使い方を説明したところで、よくある質問に移りましょう。
2. 高精度浮動小数点 [#2]
F-stringsにはフォーマット指定子と呼ばれるシンプルな記号があり、これを使うと出力文字列を好きなようにフォーマットすることができます。 これは特に数値を表現するのに便利です。 このセクションでは、数値を表現するいくつかの方法の1つである10進数表現について見ていきます。
F文字列を使うと、長さの異なる少数の桁を統一して、きれいに出力することができます。
使い方は簡単だ。
中括弧で囲んだ変数の後に:.2f
をつけると、入力した数字がそのまま出力されます。
この場合、2
と入力しているので、小数点以下2桁までを出力します。
float1 = 11.38471
float2 = 8.1
print(f'float1: {float1:.2f}, float2: {float2:.2f}')
# Output:
# float1: 11.38, float2: 8.10
その結果です、
小数点以下が2桁以上あるので float1
の最後に 0
を追加し、最初の位置で終わっているので float2
を追加しました。
非常に小さい素数の場合は、浮動小数点文字 e
でフォーマットすることもできます。
e
を追加することで、Pythonは小数点以下何桁かを教えてくれます。桁数を指定することもできます。
例で確認してみましょう。
too_small_num = 0.00000000123
print(f'too_small_num: {too_small_num:e}, too_samll_num_3: {too_small_num:.3e}')
# Output:
# too_small_num: 1.230000e-09, too_samll_num_3: 1.230e-09
最後に、パーセント(%)を小数で出力することもでき、この場合も小数点以下の桁数を設定できる。
score = 0.95
print(f'score(%): {score:.0%}, {score:.2%}, {score:.4%}')
# Output:
# score(%): 95%, 95.00%, 95.0000%
3. Python f-string digits
2節](#2)で小数点以下の桁数について学びました。 同じ原則を整数にも適用できます。
小数が .0f
、浮動小数点が .0e
、パーセンテージが .0%
であれば、整数は ,d
となります。
アンダースコアではなくカンマ。
1,000
以上の大きな数値を読みやすく出力するのに便利です。
big_num = 10000020003
print(f'big_num_with_comma: {big_num:,d}')
# Output:
# big_num_with_comma: 10,000,020,003
また、^
でスペースを追加したり、2進数、8進数、16進数を出力することもできます。
コードで確認してみましょう。
number = 25
point = 2.543
print(f"Binary: {number:b}")
print(f"Integer: {number:d}")
print(f"octal:{number:o}")
print(f"Hexadecimal: {number:x}")
print(f"Floating point: {point:.2e}")
print(f"Decimal: {point:.2f}")
print(f"Decimal or floating point automatically: {point:.2g}")
print(f"Percent: {point:.2%}")
# Output:
# Binary: 11001
# Integer: 25
# octal: 31
# Hexadecimal: 19
# Floating point: 2.54e+00
# Decimal: 2.54
# Decimal or floating point automatically: 2.5
# Percent: 254.30
4. 新しい行
Python は複数行の文字列 ('''
) をサポートしており、直感的に折り返すことができます。
他の方法で折り返しを使用するには、記号 \n
を使用する必要があります。
multiline1 = '''multiline
string'''
multiline2 = f'multiline\nstring'
# Output:
# multiline
# string
実際には、'''
を使った複数行の文字列は、自動的に \n
を挿入する便利な構文に過ぎません。
5. f-文字列とforループ
f-stringはfor文と組み合わせてより読みやすいコードを書くこともできます。 次のコードはリスト内の友達の名前を1つずつ表示します。
friends = ["Mark", "Elon"]
for friend in friends:
print(f"My friend {friend}")
# Output:
# My friend Mark
# My friend Elon
6. Python f-stringエラーのトラブルシューティング
f-stringを使うときによく遭遇するエラーをいくつか紹介します。 それぞれの原因と解決方法をまとめます。
-
SyntaxError: Invalid syntax:
. f-string 構文に従っていない場合に発生します。 文字列リテラルの前にf
をつけ、変数や式を中括弧{}
で正しく囲んでいるか確認してください。 -
NameError: Name '...' is not defined:
. このエラーは、宣言されていない変数を使用している場合に発生します。 文字列の間に挿入した変数が宣言されていることを確認してください。 -
TypeError: '...' object is not callable:
このエラーは、中括弧{}
を明確に入力せずに F-string 構文で変数や式を挿入した場合に発生します。 正しい書式を使用しているか確認してください。 代わりに、まず結果を計算し、それをF-stringに埋め込んでください。 -
SyntaxError: f-string expression part cannot contain a backslash:
. 生の文字列を除く全ての Python 文字列において、バックスラッシュ\
は特別な意味を持ちます。 これは改行やタブなどを\n \t
のような記号で示すために使われるからです。 ですから、変数や式の中で直接バックスラッシュを使うとエラーになります。
どうしてもバックスラッシュを使いたい場合は、エスケープして通常の文字列に戻る別のバックスラッシュと一緒に使ってください。
print(f'\\')
# Output:
# \
ValueError: Single '}' encountered in format string:
このエラーは、print(f'{{name}')
のように中括弧を余分に入力すると発生します。 もし中括弧を使いたい場合は{{
や}}
のようにエスケープしてください。
print(f'{{{name}}}')
# Output:
# {John Doe}
7. まとめ
ここまで、PythonのF文字列に関連するいくつかのトピックについてお話してきました。 どのようなドメインで開発するにしても、F-stringsはおそらく毎日遭遇する機能の1つでしょう。 F文字列に慣れ親しみ、いざというときに使えるようになる一助になれば幸いです。
