こんにちは。
最近pythonを勉強していて、こうやって出力を返せば良いのかと納得したのがあったので、それについて紹介します。
◯出力はしたいが、長さは制限したい
debugとかをする際に、値の出力はしたいんだけど、その出力が長すぎるのもいやだみたいなときって結構あると思います(データを出力させたいときなど)。
例えば、1万個あるような配列なのだけど、最初の数個だけ以下のような感じで出力したいというようなシーンです。
[1, 2, 3, 4, 5, ... ]
これをうまくやってくれる、reprlibというのを知ったので、メモがてら紹介します。
◯reprlibの中身
reprlibに関する詳細な説明は公式のドキュメントを見てほしいのですが、簡単に説明すると以下のような機能やクラスを持ちます。
名称 | 説明 |
reprlib.Repr | 各オブジェクトの表示方法を指定することが出来るclass。ここからサブクラスとかを作って、カスタマイズさせたい場合は、これを使用する |
reprlib.aRepr | reprlib.repr関数を提供するinstance。この属性の値を変えると、 |
reprlib.repr | これを使って、出力の長さを制限する |
@reprlib.recursive_repr(fillvalue="...") | 再帰的な出力が合った場合に出力数を制限するデコレーター |
いろいろできますが、基本はデフォルトの出力でいいと思うので、reprlib.repr()関数を使う感じでいいと思います。
◯reprlibの使い方
基本的な使い方は以下のような感じで、使います。
from reprlib import repr many_item_list = [i for i in range(100)] repr(many_item_list) # 出力 # '[0, 1, 2, 3, 4, 5, ...]'
普通に出力したらばかみたいに100個の要素が帰ってきちゃうので、これは便利ですね。
次に、出力する長さの制限を変えてみたいと思います。
from reprlib import Repr sample_repr = Repr() sample_repr.maxlist = 10 sample_repr.repr(many_item_list) # 出力 # '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...]'
ここではmaxlistを変えましたが、他の属性についても変えることができます。それについては、ソースコードのclass:Reprの属性値をみるか、ドキュメントを見ればわかります。
自分でクラスの__repr__を実装するときとかにこれをつかうと、便利ですね。
それでは。