このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】formatメソッド

formatメソッド

 formatメソッドは、文字列中に変数や値を埋め込み、出力フォーマットを柔軟に制御するための強力なツールです。これにより、データを見やすい形式で表示したり、レポートやログ出力などで整然とした文字列を生成することができます。ここでは、formatメソッドの基本構文や書式指定子、位置引数・キーワード引数、さらにはオブジェクトやシーケンスの属性や要素を参照する方法について、具体例と表を交えて解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.formatメソッドの基本

1.1. 基本構文と役割

 formatメソッドは、文字列オブジェクトに対して呼び出され、書式指定文字列中の波括弧 {} 内に埋め込む値を引数として受け取ります。基本的な構文は次の通りです。

書式文字列.format(値1, 値2, …, 引数名=値)

たとえば、次の例では、名前と年齢を埋め込んだメッセージを作成します。

name = "Alice"
age = 30
message = "{} is {} years old.".format(name, age)
print(message)

実行結果

Alice is 30 years old.

解説

  • {} は位置引数を左から順に埋め込むプレースホルダーです。
  • 上記の例では、nameage が順に代入され、「Alice is 30 years old.」という文字列が出力されます。

1.2. 位置引数とキーワード引数の利用

 formatメソッドでは、値の埋め込みに位置引数とキーワード引数の両方を利用できます。これにより、埋め込み位置を明示的に指定したり、引数の順序が変わっても問題なく使うことが可能です。以下の表は、各記法の違いを示しています。

記法説明
{}"{} is {} years old.".format(name, age)左から順に値を埋め込む
{0}, {1}"{0} is {1} years old.".format(name, age)数字による位置指定(最初の引数は0)
{name}, {age}"{name} is {age} years old.".format(name=name, age=age)キーワードで値を指定

【例】

message1 = "{0} is {1} years old.".format(name, age)
message2 = "{name} is {age} years old.".format(name=name, age=age)
print(message1)
print(message2)

実行結果

Alice is 30 years old.
Alice is 30 years old.

解説

どちらの記法も「Alice is 30 years old.」と出力され、好みに合わせて使い分けられます。

2.応用例:Employeeクラスを使ったフォーマット

 ここでは、Employeeクラス(従業員)を例に、オブジェクトの属性を利用した書式指定や、シーケンス内の要素を参照する方法を示します。

2.1. Employeeクラスの定義と属性の参照

 まずは、Employeeクラスを定義し、従業員の名前、役職、給与を属性として持たせます。次に、formatメソッドを使ってオブジェクトの属性を文字列に埋め込みます。

class Employee:
    def __init__(self, name, position, salary):
        self.name = name
        self.position = position
        self.salary = salary

# Employeeオブジェクトの生成
emp = Employee("Bob", "Manager", 75000)

# オブジェクトの属性を直接参照して文字列に埋め込む例
message = "Employee: {0.name}, Position: {0.position}, Salary: ${0.salary}".format(emp)
print(message)

実行結果

Employee: Bob, Position: Manager, Salary: $75000

解説

  • {0.name} のように、数字(0)は位置引数を指定しており、その後にドット記法で属性にアクセスしています。
  • {0.name}{0.position}{0.salary}0.は、format()メソッドに渡された最初の引数(この場合はempオブジェクト)を参照していることを示しています。つまり、0はフォーマット文字列に渡された引数のリストの中で、インデックス0番目(最初)の要素を指しています
  • この方法で、1つのEmployeeオブジェクトから複数の属性を簡潔に参照し、フォーマット済みの文字列が生成されます。

2.2. シーケンスの要素を利用したフォーマット

 次に、複数のEmployeeオブジェクトをリストに格納し、各要素の情報を整形して表示する例です。リストの内包表記と組み合わせることで、より簡潔に処理できます。

# 複数のEmployeeオブジェクトをリストに格納
employees = [
    Employee("Bob", "Manager", 75000),
    Employee("Alice", "Engineer", 68000),
    Employee("Eve", "Analyst", 62000)
]

# リスト内包表記とformatメソッドを使って、各従業員の情報を整形して表示
formatted_employees = [
    "Employee: {0.name}, Position: {0.position}, Salary: ${0.salary}".format(emp)
    for emp in employees
]
for info in formatted_employees:
    print(info)

実行結果

Employee: Bob, Position: Manager, Salary: $75000
Employee: Alice, Position: Engineer, Salary: $68000
Employee: Eve, Position: Analyst, Salary: $62000

解説

  • リスト内包表記を用いて、employeesリストの各Employeeオブジェクトに対してformatメソッドでフォーマット済みの文字列を作成しています。
  • 各オブジェクトの属性に対して、同様の書式指定が適用され、結果として従業員情報が整然と出力されます。

まとめ

 formatメソッドは、文字列に値を埋め込む際に、位置引数やキーワード引数を利用して柔軟に出力を整形できる非常に便利な機能です。

  • 基本構文は「書式文字列.format(値, 引数名=値, ...)」であり、波括弧を使って値を埋め込みます。
  • 位置指定やキーワード指定、オブジェクトの属性、シーケンスの要素を参照する機能など、多様な記法が利用できます。
  • 実践例としてEmployeeクラスを用いたフォーマットでは、オブジェクトの属性を効率よく文字列に反映する方法や、内包表記との組み合わせで複数オブジェクトを一括して整形する方法を示しました。

 これらのテクニックを活用することで、見やすく洗練された出力を実現し、コードの可読性と保守性を向上させることができます。