Pythonでオブジェクトを文字列表現に変換する際、`repr()`関数は非常に便利な組み込み関数です。この記事では、`repr()`関数の使い方と実践的な例を詳しく解説します。

repr()関数の基本

`repr()`関数は、オブジェクトの「公式な」文字列表現を返します。この関数は、デバッグやオブジェクトの詳細な情報を確認する際に特に役立ちます。

x = "Hello"
print(repr(x))  # 出力: 'Hello'

numbers = [1, 2, 3]
print(repr(numbers))  # 出力: [1, 2, 3]

str()との違い

`repr()`は`str()`と似ていますが、重要な違いがあります:

  • `repr()`は開発者向けの詳細な表現を返す
  • `str()`はユーザー向けの読みやすい表現を返す
text = "Hello\nWorld"
print(str(text))   # 出力: Hello
                   #       World
print(repr(text))  # 出力: 'Hello\nWorld'

カスタムクラスでrepr()を実装する

独自のクラスで`repr()`の出力をカスタマイズするには、`__repr__`メソッドを実装します:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

person = Person("Alice", 30)
print(repr(person))  # 出力: Person(name='Alice', age=30)

実践的な使用例

デバッグでの活用

def debug_value(value):
    print(f"Debug: {repr(value)}")

debug_value("test\n")  # 出力: Debug: 'test\n'
debug_value([1, 2, 3])  # 出力: Debug: [1, 2, 3]

データ構造の検証

complex_data = {'name': 'John', 'data': [1, 2, {'key': 'value'}]}
print(repr(complex_data))
# 出力: {'name': 'John', 'data': [1, 2, {'key': 'value'}]}

主な特徴とメリット

  • オブジェクトの正確な状態を表示
  • 特殊文字や制御文字も明示的に表示
  • デバッグに最適
  • eval()と組み合わせて使用可能

注意点

  • 大きなオブジェクトの場合、出力が長くなる可能性がある
  • 循環参照を含むオブジェクトでは注意が必要

まとめ

`repr()`関数は、Pythonオブジェクトの詳細な文字列表現を得るための強力なツールです。デバッグやオブジェクトの状態確認に特に有用で、カスタムクラスでも柔軟に活用できます。

この関数を効果的に使用することで、プログラムの開発とデバッグが格段に効率化されます。