実例を通してPython str()とrepr()の違いを理解する。


この文章は主に実例を通してPython str()とrepr()の違いを知ることを紹介しています。ここではサンプルコードを通して紹介された非常に詳細で、皆さんの学習や仕事に対して一定の参考学習価値を持っています。必要な友達は下記を参照してください。
違います
実は用途は最大の違いです。str()は主にエンドユーザのためにいくつかの情報を出力するために使われますが、repr()は主にデバッグに使われます。同時に後者の目標は幾つかの曖昧性(例えば浮動小数点の精度問題)を除去するためであり、前者は主に読み取り可能である。
使用

In [12]: s = 'abc'
In [13]: print(str(s))
abc
In [14]: print(2.0/11)
0.18181818181818182
In [15]: repr(s)
Out[15]: "'abc'"
In [16]: repr(2.0/11)
Out[16]: '0.18181818181818182'
よく見ると、精度の違いは生まれていません。しかしPython 2では違いが発見されます。

>>> eval('2.0/11')
0.18181818181818182
>>> print(2.0/11)
0.181818181818
だから、別の例を示します。

In [17]: import datetime

In [18]: n = datetime.datetime.now()

In [19]: print(str(n)
  ...: )
2020-01-16 09:22:13.361995

In [20]: repr(n)
Out[20]: 'datetime.datetime(2020, 1, 16, 9, 22, 13, 361995)'
前者の読み取り可能性がより良く、後者はタイプと値をプリントアウトし、より調整に適していることが見られます。
実現する
両方とも内蔵関数で実現します。公式文書を見てrepr()を言います。
Return a string containing a printable representation of an object.
A class can control what this function returns for its instancs by defining a_urepr_()method.
この関数をカスタマイズして、自分のrepr()を実現できるという意味で、以下のようになります。

In [35]: class TestClass:
  ...:   def __init__(self, name, age):
  ...:     self.name = name
  ...:     self.age = age
  ...:   def __repr__(self):
  ...:     return 'repr: ' + self.name + ' ,' + self.age
  ...:   def __str__(self):
  ...:     return self.name + ' ,' + self.age
  ...:
  
In [38]: tt = TestClass('tony', '23')

In [39]: repr(tt)
Out[39]: 'repr: tony ,23'

In [40]: str(tt)
Out[40]: 'tony ,23'
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。