著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Python文字列は、文字と記号の可変長シーケンスです。 文字列を使用すると、プログラムでテキストを操作および追跡したり、そのテキストをユーザーに表示したりできます。

Pythonには、%フォーマットスタイルやstr.format()メソッドなど、文字列を作成するためのいくつかのメソッドが含まれています。 str.format()メソッドは、%フォーマットスタイルよりも新しく、 Python3で文字列フォーマッターを使用する方法で詳しく説明されています。 f-stringフォーマットはPythonの文字列フォーマットの最新の方法であり、%フォーマットスタイルまたはstr.format()メソッドのいずれでも使用できない文字列内の式の使用などの便利さを提供します。

このチュートリアルでは、Python3のf文字列を使用して文字列を動的に作成する方法を学習します。

前提条件

このチュートリアルを最大限に活用するには、Python3でのプログラミングにある程度精通していることをお勧めします。 必要な背景情報については、次のチュートリアルを確認できます。

f文字列での変数の使用

プログラムは通常、変数を文字列に置き換える必要があります。 Pythonのf文字列は、これを行うための便利な方法を提供します。 例を考えてみましょう:

ocean_description = "deep blue"
print(f"The ocean is {ocean_description} today")

このコードを実行すると、次のような出力が返されます。

Output
The ocean is deep blue today

まず、文字列deep blueocean_descriptionという名前の変数にバインドします。 次の行では、文字列の前にfを付けて、f文字列のフォーマットをアクティブにします。 f文字列は、{}文字内の式をPythonとして解釈します。 したがって、{ocean_description}と言うことで、Pythonにocean_description変数の値を文字列に挿入するように指示しています。 結果の文字列が出力されます:The ocean is deep blue today

f文字列での任意の式の使用

前のセクションでは、変数をf文字列に置き換える方法を学びました。 f文字列を使用すると、任意のPython式を置き換えることもできます。

print(f"1 + 1 = {1 + 1}")

このコードを実行すると、次のような出力が返されます。

Output
1 + 1 = 2

この例では、文字列にfプレフィックスを含めることにより、f文字列のフォーマットを再度アクティブにします。 {}文字の中に、1 + 1の有効なPython式が含まれています。 その式の最終結果は2であり、これは印刷される最終的な文字列に含まれます。

ほぼすべての有効なPython式をf文字列で使用できます。 次の例では、f文字列内のディクショナリ値にアクセスする方法を示します。

ocean_dict = {"shark": "fish"}
print(f"A shark is a kind of {ocean_dict['shark']}")

次のような出力を受け取ります。

Output
A shark is a kind of fish

最初の行で、単一のキーと値のペアを使用してディクショナリを定義します。キーsharkは値fishにマップされます。 次の行では、式ocean_dict['shark']{}文字の中にf文字列に埋め込みます。 その埋め込まれた式の結果はfishであり、これは出力に含まれます。

オブジェクトのreprを含む

デフォルトでは、f-stringsは、含まれているPythonオブジェクトを文字列に強制変換して、オブジェクトを最終的な文字列の一部にすることができるようにします。 デフォルトでは、Pythonはオブジェクトに定義された __ str__メソッドを使用して、オブジェクトを文字列に強制変換します。 組み込みのPythonオブジェクト(例:リスト辞書、整数、浮動小数点数)には、強制プロセスがシームレスに行われるように、事前定義された__str__メソッドが含まれています。

生成された文字列でオブジェクトの代替表現を使用すると便利な場合があります。 f-stringsには、Pythonオブジェクトのreprを最終出力に含めることを可能にするディレクティブが含まれています。 Pythonオブジェクトのreprは、指定されたPythonオブジェクトのデバッグ記述です。

__str__reprの区別を明確にするための例を考えてみましょう。 変数でreprを呼び出すには、式の最後に!rを追加します。

from datetime import datetime

now = datetime.now()
print(f"{now}")
print(f"{now!r}")

このコードを実行すると、次のような出力が返されます。

Output
2020-08-22 18:23:22.233108 datetime.datetime(2020, 8, 22, 18, 23, 22, 233108)

注:通常、出力には、コンピューターの現在の時刻に関連するテキストが含まれます。 コンピューターの時間は、サンプル出力に表示されている時間とは異なります。

この例では、 datetimeモジュールを使用して現在の時刻を表すオブジェクトを取得し、それをnowという名前の変数にバインドします。 次に、2つの異なるf文字列を使用してnowを2回印刷します。 最初のf文字列には追加の修飾子が含まれていないため、Pythonは現在の時刻の__str__表現を使用します。

2番目の例では、f-stringに埋め込まれた式の最後に!r修飾子を追加します。 !rは、Pythonにnowreprを呼び出して文字列表現を生成するように指示します。 一般に、reprは、インタラクティブなPythonインタープリターにより適したデバッグ情報を出力します。 この場合、nowにバインドされたdatetimeオブジェクトに関する詳細を受け取ります。

フォーマット仕様の使用

f-stringsは、出力された文字列をさらに制御するためのフォーマット仕様修飾子を提供します。 これらのフォーマット仕様修飾子には、:というプレフィックスが付いています。次に例を示します。

{expression:format_spec}

パーセンテージ修飾子は、使用可能な修飾子の1つの例です。

decimal_value = 18.12 / 100.0
print(f"{decimal_value:.1%}")

このコードを実行すると、次のような出力が返されます。

Output
18.1%

まず、decimal_value0.1812にバインドします(18.12 / 100.0の結果)。 次に、f文字列を使用してdecimal_valueをパーセンテージで出力します。 :は、フォーマット仕様セクションを開始します。 .1は、小数点以下1桁の精度で数値を出力したいことを示します。 %は、使用したいフォーマット仕様のタイプです。 %形式の仕様では、数値に100を掛けて、出力に%記号を含めます。 したがって、最終的な出力は18.12%0.1812 * 100は小数点以下第1位に四捨五入され、%記号)になります。

フォーマット仕様では、パーセンテージを印刷する以上のことができます。 それらはそれ自体が複雑なミニチュア言語です。 たとえば、式の前後にパディング文字を含めたり、科学的記数法で数値を印刷したりできます。

Pythonドキュメントのこのセクションを使用して、Pythonで利用可能なフォーマット仕様の詳細を学ぶことができます。

特殊文字の取り扱い

これまで見てきたように、{}文字はf文字列で特別な意味を持っています。 リテラルの{または}文字を印刷する場合は、{または}文字を追加してエスケープする必要があります。 次の例を考えてみましょう。

print(f"{{}}")

このコードを実行すると、次のような出力が返されます。

Output
{}

リテラル{}を印刷するには、{}の両方を2倍にする必要がありました。これらの文字は通常、特別な意味を持っているためです。

結論

f-stringsは、Pythonで動的かつ簡潔に文字列を作成するための強力で便利な方法です。 このチュートリアルでは、変数と式をf文字列に代入する方法、型変換指定子を使用する方法、および特殊文字をf文字列でエスケープする方法を学習しました。

stringモジュールは、このチュートリアルでは取り上げなかった追加のクラスとユーティリティを公開します。 ベースラインができたので、文字列モジュールのドキュメントを使用して、他の利用可能なクラスとユーティリティについて詳しく知ることができます。

また、Pythonの詳細については、PythonコンテンツページまたはPython3シリーズのコーディング方法をご覧ください。