コンテンツにスキップ

Pythonの文字列補完の使い方

[

Pythonの文字列内挿とフォーマットについて

Pythonのf-stringは、文字列の内挿とフォーマットを簡単に行う方法を提供します。これは、.format()メソッドやモジュロ演算子(%)などの伝統的な文字列内挿やフォーマットツールよりも読みやすく、簡潔でエラーの発生しにくいものです。f-stringは、これらのツールよりも若干高速です!

このチュートリアルの終わりには、Python開発者として学んでマスターすべき強力なツールであるf-stringの理由がわかるでしょう。

このチュートリアルでは、以下の内容を学びます:

  • f-stringを使って値、オブジェクト、および式を文字列に内挿する方法
  • Pythonの文字列フォーマットミニ言語を使ったf-stringのフォーマット方法
  • Python 3.12以降のf-stringのいくつかの便利な機能の活用方法
  • f-stringではなく伝統的な内挿ツールを使用すべき場合の判断

このチュートリアルを最大限に活用するには、Pythonの文字列データ型に精通していることが望ましいです。また、モジュロ演算子(%)や.format()メソッドなどの他の文字列内挿ツールの経験も役立ちます。

Python 3.6以前の文字列内挿とフォーマット

Python 3.6以前では、文字列リテラル内の値、変数、および式を内挿するための2つの主要なツールがありました。

  1. 文字列内挿演算子%)、またはモジュロ演算子
  2. str.format()メソッド

次のセクションでは、これらの2つの文字列内挿ツールについて復習します。また、文字列のフォーマット機能についても学びます。

モジュロ演算子、%

モジュロ演算子(%)を使って、文字列内に値や変数を挿入することができます。以下に例を示します。

name = 'Alice'
age = 25
info = "My name is %s and I am %d years old." % (name, age)
print(info)

出力:

My name is Alice and I am 25 years old.

モジュロ演算子では、変数や値をタプルの形式で渡す必要があります。

str.format()メソッド

str.format()メソッドを使用すると、文字列内に値や変数を挿入することができます。以下に例を示します。

name = 'Bob'
age = 30
info = "My name is {} and I am {} years old.".format(name, age)
print(info)

出力:

My name is Bob and I am 30 years old.

{}の中に変数や値を書き、.format()メソッドの引数として渡します。

PythonでのF-Stringsを使った文字列内挿

Python 3.6からは、f-stringsと呼ばれる新しい機能が導入されました。f-stringsは、文字列内に直接変数や値を埋め込むことができる便利な方法です。以下に例を示します。

name = 'Carol'
age = 35
info = f"My name is {name} and I am {age} years old."
print(info)

出力:

My name is Carol and I am 35 years old.

fを文字列の前に付けることで、f-stringを作成できます。変数や値を{}で囲み、その中に直接書き込むことができます。

PythonのF-Stringを使った文字列のフォーマット

f-stringは、フォーマットミニ言語を使用して文字列をフォーマットすることもできます。フォーマットミニ言語を使用することで、文字列の幅や桁数、小数点以下の表示などを制御することができます。以下に例を示します。

price = 29.99
formatted_price = f"The price is ${price:.2f}"
print(formatted_price)

出力:

The price is $29.99

.2fはフォーマットミニ言語の一部であり、小数点以下を2桁に制限します。

F-Stringのその他の便利な機能

F-Stringには、さまざまな便利な機能があります。以下にいくつかの例を挙げます。

F-Stringでオブジェクトの文字列表現を使用する

オブジェクトのstrメソッドを使用してその文字列表現を取得し、f-string内で使用することができます。以下に例を示します。

class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person: {self.name}, {self.age}"
person = Person('Dave', 40)
info = f"The person is {person}"
print(info)

出力:

The person is Person: Dave, 40

デバッグ用の自己記述式の式

F-Stringでは、値や式に説明を追加することができます。これは特にデバッグの際に便利です。以下に例を示します。

x = 10
y = 5
debug_info = f"The value of x is {x!r} and the value of y is {y!r}"
print(debug_info)

出力:

The value of x is 10 and the value of y is 5

!rを使用することで、値や式をそのままの形式で表示できます。

F-Stringと伝統的なツールのパフォーマンス比較

F-Stringは、他の伝統的な文字列内挿ツールと比べて高速です。実際のパフォーマンスは環境や特定の使用方法に依存しますが、一般的にはF-Stringが速いとされています。

Python 3.12以降のF-Stringのアップグレード

Python 3.12以降、F-Stringにいくつかの新しい機能が追加されました。

ダブルクォーテーションの使用

F-Stringでは、ダブルクォーテーション("")を使って文字列を囲むこともできます。以下に例を示します。

name = 'Eve'
info = f""""My name is {name}.""""
print(info)

出力:

"My name is Eve."

これにより、文字列内でシングルクォーテーションを使用できます。

バックスラッシュの使用

バックスラッシュ(\)を使用して、複数行の文字列をF-String内で作成することもできます。以下に例を示します。

name = 'Frank'
age = 50
info = f"My name is {name} \
and I am {age} years old."
print(info)

出力:

My name is Frank and I am 50 years old.

インラインコメントの書き方

F-String内には、インラインコメントを追加することもできます。以下に例を示します。

age = 60
info = f"My age is {age} {'# This is my age!'}"
print(info)

出力:

My age is 60 # This is my age!

コメントは{}内に直接書き込むことで、インラインで追加できます。

F-Stringエラーメッセージの解読

F-String内でエラーが発生した場合、エラーメッセージが表示されます。これにより、エラーが発生した場所を特定しやすくなります。以下に例を示します。

name = 'George'
info = f"My name is {name!s 'and I am {age} years old.'}"
print(info)

出力:

SyntaxError: invalid syntax

この場合、エラーメッセージがSyntaxError: invalid syntaxとなり、エラーの箇所を特定することができます。

F-Stringよりも伝統的な文字列フォーマットツールを使用する場合

F-Stringは非常に強力ですが、一部の特定の場面では伝統的な文字列フォーマットツールの使用を検討する必要があります。

辞書内挿

辞書のキーと値を内挿する場合、f-stringsではなく.format()メソッドを使用することが推奨されます。以下に例を示します。

data = {'name': 'Harry', 'age': 70}
info = "My name is {name} and I am {age} years old.".format(**data)
print(info)

出力:

My name is Harry and I am 70 years old.

**dataを使って辞書のキーと値を展開し、.format()メソッドに渡します。

ログの遅延評価

ログに情報を出力する場合、f-stringsではなく文字列の遅延評価に適したツールを使用することが推奨されます。以下に例を示します。

import logging
logging.basicConfig(level=logging.INFO)
name = 'Ivy'
age = 80
logging.info("My name is %s and I am %d years old.", name, age)

出力:

INFO:root:My name is Ivy and I am 80 years old.

ここでは、logging.info()メソッドを使用してログを出力しています。

SQLデータベースクエリ

SQLクエリの文字列の組み立てには、f-stringsではなくデータベースAPIのパラメータ化クエリを使用することが推奨されます。パラメータ化クエリはSQLインジェクション攻撃から保護されます。

import sqlite3
db = sqlite3.connect('mydatabase.db')
cursor = db.cursor()
name = 'John'
age = 90
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
db.commit()
db.close()

国際化とローカライゼーション

国際化とローカライゼーションのために、f-stringsではなく専用のライブラリやツールを使用することが推奨されます。例えば、PythonのBabelライブラリを使用することができます。

from babel.dates import format_date
date = datetime.date(2023, 10, 18)
formatted_date = format_date(date, locale='en_US')
print(formatted_date)

出力(英語ロケール):

Oct 18, 2023

ここでは、babel.dates.format_date()関数を使用して日付をフォーマットしています。

古い文字列を自動的にF-Stringに変換する

Pythonコードベースで古いスタイルの文字列(モジュロ演算子や.format()メソッドを使用した文字列)を大量に使用している場合、python-modernizeなどのツールを使用して自動的にF-Stringに変換することができます。

自動変換は便利ですが、変換後のコードを確認して変更が正しく行われたことを確認したいですね。

まとめ

Pythonのf-stringは、文字列内挿とフォーマットを簡単に行うための強力なツールです。本記事では、f-stringの基本的な使い方やフォーマットの方法について詳しく説明しました。また、f-stringの便利な機能や伝統的なツールとの比較についても議論しました。

f-stringは、Pythonプログラミングの中でも重要なトピックの一つですので、ぜひこの機能をマスターしてPythonの開発を進めていきましょう。