Python学習【365日チャレンジ!】295日目のマスターU(@Udemy11)です。
釣りあるあるなんですが、気合いを入れてちょっと早めに準備バッチリで釣りに行くと釣れないことが多くて、慌ててなにか忘れ物をしたときに限ってよく釣れるんです。
昨晩もアオリイカとアジを釣るぞ~と気合い入れて準備万端で出かけていったのですが、結果は見事なまでの丸坊主。。。
ま~釣れなければ、魚をさばく必要もないし、フィッシュグリップやクーラーを洗う必要がないので、面倒じゃなくていいのですが、やっぱり釣りに行ったら釣りたいですよね。
近いうちにリベンジにいこうと思います。
それでは今日も、Python学習を始めましょう。
昨日の復習
昨日は、format
とクラスオブジェクトを使ってrepr
の動作をチェックしました。
クラスを作れば、デフォルトで__repr__
や__str__
が用意されているので、それらの値をオーバーライドすることができましたが、通常は__repr__
を書き換えることはありません。
クラスの__init__
で引数を定義して、あとからformat
を使って引数を活用することもできました。
詳細については昨日の記事をごらんください。
今日は、出力フォーマットをカスタマイズできるpprint
を学習します。
pprint.PrettyPrinter
かんたんなリストを定義して、より見ずらいリストにしてからpprint
を使って見やすく表示してみます。
import pprint
l = ['apple', 'banana', 'mango', 'orange', 'peach']
l.insert(0, l[:])
print(l)
pp = pprint.PrettyPrinter()
pp.pprint(l)
出力結果
[['apple', 'banana', 'mango', 'orange', 'peach'], 'apple', 'banana', 'mango', 'orange', 'peach']
[['apple', 'banana', 'mango', 'orange', 'peach'],
'apple',
'banana',
'mango',
'orange',
'peach']
3行目で果物のリストを作って、さらにそのリストのインデックス0
の位置に同じリストを挿入したリストにして、5行目でリストを出力しています。
7行目でPrettyPrinter
オブジェクトを作って、オブジェクトにリストl
を入れてpprint
出力しています。
print
では、リストが1行で出力されていますが、pprint
だとリストの値が一つづつ開業されて出力されます。
indent・width・compact・depth
PrettyPrinter
には、見やすい表示にするための引数が用意されています。
indent
pp = pprint.PrettyPrinter(indent=3)
pp.pprint(l)
出力結果
[ ['apple', 'banana', 'mango', 'orange', 'peach'],
'apple',
'banana',
'mango',
'orange',
'peach']
出力結果はprint
出力の部分を省いていますが、indent=3
を指定したことで行頭にインデントが挿入されています。
width
pp = pprint.PrettyPrinter(width=30)
pp.pprint(l)
出力結果
[['apple',
'banana',
'mango',
'orange',
'peach'],
'apple',
'banana',
'mango',
'orange',
'peach']
width
で1行が30文字を超えるものは、自動的に改行したリストにするので、先頭のリストが一つの値ごとに改行されて出力されています。
compact=True
pp = pprint.PrettyPrinter(width=30, compact=True)
pp.pprint(l)
出力結果
[['apple', 'banana', 'mango',
'orange', 'peach'],
'apple', 'banana', 'mango',
'orange', 'peach']
compact=True
を入れると、条件に合わせて見やすい出力で表示してくれます。
depth
import pprint
l = ['apple', 'banana', 'mango', 'orange', 'peach']
l.insert(0, l[:])
l.insert(0, l[:])
l.insert(0, l[:])
l.insert(0, l[:])
pp = pprint.PrettyPrinter(depth=2)
pp.pprint(l)
出力結果
[[[...], [...], [...], 'apple', 'banana', 'mango', 'orange', 'peach'],
[[...], [...], 'apple', 'banana', 'mango', 'orange', 'peach'],
[[...], 'apple', 'banana', 'mango', 'orange', 'peach'],
['apple', 'banana', 'mango', 'orange', 'peach'],
'apple',
'banana',
'mango',
'orange',
'peach']
最初のリストに4回同じリストを挿入して、depth
を使って出力しています。
depth
は、階層の深さを指定して、表示を...
にして省略してくれます。
例示したのは、リストですが、タプルでも辞書型でもPrettyPrinter
で同じように出力の表示をカスタマイズすることが可能です。
まとめ
出力結果の表示をカスタマイズすれば、私たち人間にもわかりやすくなります。
コンピューターが読み込むだけなら見やすい表示に変える必要はなく、規則に沿った形でデータが格納されていれば、規則に従って読み込むことができるので、pprint
は、コンピューターのためではなく、人のために存在するメソッドだと言えます。
print
自体も人のためのメソッドなんですけどね。
人とコンピューターをつなげるプログラミング言語は、ほんといろいろと人間に対して気を使わないといけないので大変ですよね(笑)。
今日はこのへんで。
ということで、明日もGood Python!