Pythonでrepr()を代替するreprlibモジュールの使い方
Pythonでは、大量のデータを表示する際に、出力が長くなりすぎるのを防ぎたいケースがあります。そんなときに役立つのが reprlib モジュールです。このモジュールを使うと、組み込み関数 repr() のようにオブジェクトを文字列化しつつ、表示サイズに制限をかけることができます。
reprlib を利用するには、まず次のようにインポートします。
import reprlib
reprlib モジュールには、用途に応じて使えるクラスやメソッドがいくつか用意されています。
reprlib.Repr クラス
Repr クラスは、フォーマット処理を行うためのクラスです。組み込みの repr() 関数と同様の働きをするメソッドを生成でき、このクラスを使うことでサイズ制限や対象となるオブジェクト型ごとの設定を柔軟に追加できます。
reprlib.repr(object) メソッド
このメソッドは、組み込みの repr() メソッドと同様の文字列を返します。ただし、ほとんどのサイズに対して上限が設定されている点が異なります。
Repr オブジェクトの属性
Repr オブジェクトには複数の属性があり、データ型ごとに表示サイズの上限を細かく指定できます。
repr.maxlevel は、再帰的な表現の深さの上限を表す属性です。デフォルト値は6です。また、dict(辞書)、list(リスト)、tuple(タプル)、set(集合)など、各データ型にもそれぞれ最大サイズの制限が用意されています。
| 番号 | メソッド/変数と説明 |
|---|---|
| 1 | Repr.maxlong long値として表現できる最大桁数。デフォルトは40。 |
| 2 | Repr.maxstring 文字列型オブジェクトに含められる最大文字数。デフォルトは30。 |
| 3 | Repr.maxother フォーマット方法が明示されていないその他のデータのサイズ上限。 |
| 4 | Repr.repr(obj) 組み込みの |
| 5 | Repr.repr1(obj, level)
|
サンプルコード
以下の例では、0〜49の階乗を要素に持つリストを作成し、reprlib.repr() で省略表示しています。さらに、Repr オブジェクトを生成して maxlong を10に設定し、大きな数値の出力を制限しています。
import reprlib import math fact_list = [math.factorial(x) for x in range(50)] print(reprlib.repr(fact_list)) myRept = reprlib.Repr() #Reprオブジェクトを作成し、longサイズを10に設定 myRept.maxlong = 10 print(myRept.repr(fact_list[23]))
実行結果
[1, 1, 2, 6, 24, 120, ...] 258...0000
このように reprlib を活用すれば、巨大な数値や長いリストでも先頭と末尾だけを表示し、中間部分を「...」で省略した読みやすい出力にできます。デバッグ時やログ出力時に表示を整理したい場合に非常に便利なモジュールです。
-
Pythonの内部動作を解説:インタプリタとメモリ上のオブジェクト配置の仕組み
本記事では、Pythonの内部動作について詳しく解説し、Pythonインタプリタがさまざまなオブジェクトに対してどのようにメモリ上の領域を割り当てているのかを見ていきます。 Pythonはどのような言語か Pythonは、Javaと同じくオブジェクト指向のプログラミング言語です。インタプリタを使ってコードを実行するため、「インタプリタ型言語」と呼ばれています。Pythonはミニマリズムとモジュール性を重視する設計思想を持っており、コードの可読性を高めながら、処理時間とメモリ使用量(時間計算量・空間計算量)を最小限に抑えることを目指しています。 また、Pythonの標準的な実装は「CPytho
-
Pythonのstr()関数とrepr()関数の違いをわかりやすく解説
str()とrepr()の基本的な役割Python公式ドキュメントによると、__repr__はオブジェクトの「公式(official)」な文字列表現を取得するために使われ、__str__は「非公式(informal)」な文字列表現を取得するために使われると説明されています。具体的には、print文や組み込み関数str()はオブジェクトの表示に__str__を使用し、組み込み関数repr()は__repr__を使用してオブジェクトを表示します。ここからは、実際の例を使って両者の動作の違いを見ていきましょう。datetimeオブジェクトでの実例まず、datetimeオブジェクトを作成します。>