python repr()の使い方

Python学習【365日チャレンジ!】293日目のマスターU(@Udemy11)です。

しれっとサイバーウィークセールが始まってましたね。

今日、スーパーのセールで40cm位あるアジが1匹150円で売ってたので、思わず5匹も購入してしまいました。

普段釣ってるアジが15cmとか20cmなので、それらの倍以上の大きさで肉厚、脂ののりもすごくてめっちゃおいしそうでした。

で、アジフライにしたらどうなるんだろうと思い、背開きにしたのですが、大きすぎて揚げられず、しょうがなしに片身づつアジフライにしました。

普段食べているアジフライが衣だけに感じるくらいの身の厚さで、片身だけでおなかいっぱいになりました。

このくらいの大きさのアジが釣れるとおもしろいんですけど。。。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、formatを使った、様々な表記方法について学習しました。

タプルや辞書型からデータを取り出したり、右寄せ、左寄せ、センタリングをして出力したり、記号を使った特殊な出力をしたりしました。

基本的な使い方だけでなく、組み合わせて応用することもできました。

詳細については昨日の記事をごらんください。

今日は、Pythonオブジェクトのrepresentationを学習します。

representation

representationは、表示や表現されたものと言う意味ですが、Pythonでは、repr()として使い、Pythonオブジェクトとして値を保有します。

文書だけだとよくわからないので、実際にコードを書いて実行してみましょう。

print('Hello')
print(str('Hello'))
print(repr('Hello'))

出力結果

Hello
Hello
'Hello'

1行目と2行目の出力は、'(シングルクォーテーション)が外れて出力されていますが、3行目のrepr('Hello')は、'が付いたままです。

reprは、Pythonが認識できるPythonオブジェクトとして値を取得しているので、'が付いたままになります。

もう少しわかりやすいコードを書いてみましょう。

datetime

datetimeを使って、現在の時間を通常のprint出力、str()repr()で出力してみます。

import datetime

d = datetime.datetime.now()
print(d)
print(str(d))
print(repr(d))

出力結果

2020-11-30 20:12:27.572525
2020-11-30 20:12:27.572525
datetime.datetime(2020, 11, 30, 20, 12, 27, 572525)

1行目と2行目の出力は、人間が見やすいようなフォーマットで出力されていますが、3行目は、コンピューターが読みやすいPythonオブジェクトとして出力されています。

対話型シェル

通常のPythonファイルのprint出力ではなく、printを使わず出力される対話型シェルだとどのように出力されるか確認してみます。

先日学習したGoogle Colaboratoryを使ってみます。

[1] import datetime
[2] d = datetime.datetime.now()
[3] d
    datetime.datetime(2020, 11, 30, 20, 21, 36, 503368)
[4] str(d)
    '2020-11-30 20:21:37.613214'
[5] repr(d)
    'datetime.datetime(2020, 11, 30, 20, 21, 38, 425114)'

対話型シェルだと定義したdが、先ほどのrepr()と同じ出力になっています。

str()repr()は、'で囲まれて出力されています。

このシングルクォーテーションの意味は多分、コンピューターが「文字列」と認識するものなので、str()repr()は、文字列として取得した値を出力していることになります。

対話型シェルでは、普通に変数を出力したときに、Pythonオブジェクトとして出力されるので注意が必要です。

ちなみにprint()を使って出力すると、Pycharm等の出力と同じになりますので、同じコードを書けば同じ結果が得られるということです。

まとめ

出力して確認する必要がなく、コンピューターが理解すればいいデータを渡す場合に活躍するのだとおもいますが、ちょっと具体的な使い方が見えていません。

ま~、今の段階ではPythonが使いやすい値として取得できるのがrepr()だというくらいの認識でいいのかなと思っています。

イテラブルオブジェクトにしても出力したら、私たちには訳がわからない値が出力されているわけで、出力した値をみて、なにが保持されているのかを理解できるのは、世界一の天才と言われた【ジョン・フォン・ノイマン】くらいじゃないでしょうか?

わからないことは実践で理解していけばいいかなと考え始めるようになってきたので、ちょっと投げやりな感じになってしまっていますが、自分なりの理解の落としどころを見つけるのも大切ですね。

それでは、明日もGood Python!