Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのstr()とrepr()?


Pythonのstr()メソッドとrepr()メソッドはどちらも、文字列の文字列表現に使用されます。どちらも同じ目的を果たしているように見えますが、少し違いがあります。

Pythonの組み込み関数str(x)を呼び出すと、xが必要なオブジェクトであることに気付いたことがありますか? str(x)の戻り値は、デフォルトの選択である__str__とフォールバックとしての__repr__の2つのメソッドに依存します。

まず、Pythonドキュメントがそれらについて何を言っているか見てみましょう-

>>> help(str)
Help on class str in module builtins:

class str(object)
| str(object='') -> str
| str(bytes_or_buffer[, encoding[, errors]]) -> str
|
| Create a new string object from the given object.

>>> help(repr)
Help on built-in function repr in module builtins:

repr(obj, /)
Return the canonical string representation of the object.

For many object types, including most builtins, eval(repr(obj)) == obj.

それでは、いくつかの例を使用して、これら2つの方法を理解してみましょう

>>> str(123)
'123'
>>> repr(123)
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str('Python')
'Python'
>>> repr('Python')
"'Python'"

repr()とstr()の戻り値は整数値で同じですが、文字列の戻り値には違いがあります。一方は正式で、もう一方は非公式です。

ここで、Pythonの公式ドキュメントを参照すると、オブジェクトの「非公式」(読み取り可能)文字列表現を見つけるために__str__が使用され、オブジェクトの「公式」文字列表現を見つけるために__repr__が使用されます。

正式な表現と非公式な表現の違いは、str値の__repr__のデフォルトの実装は、evalの引数として呼び出すことができ、戻り値は有効な文字列オブジェクトになることです。この関数(repr())は文字列を受け取り、その内容をPythonコードとして評価します。

したがって、「'Python'」を渡すと、その動作がわかります。ただし、「Python」はエラーにつながります。これは、もちろん未定義の変数Pythonとして解釈されるためです。以下はそれを理解するためのコードです-

>>> x = "Python"
>>> repr(x)
"'Python'"
>>> x1 = eval (repr(x))
>>> x == x1
True

したがって、__ str__の戻り値をevalの引数として呼び出そうとすると、失敗しました。

>>> y = "Python"
>>> str(y)
'Python'
>>> y1 = eval(str(y))
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
y1 = eval(str(y))
File "<string>", line 1, in <module>
NameError: name 'Python' is not defined

2つの違いを示す別の例は-

です。
>>> import datetime
>>> now = datetime.datetime.now()
>>> str(now)
'2019-03-29 01:29:23.211924'
>>> repr(now)
'datetime.datetime(2019, 3, 29, 1, 29, 23, 211924)'

上記の出力では、str(now)はnowの値を含む文字列を計算しますが、repr(now)は再びnowオブジェクトを再構築するために必要なPythonコードを返します。

主な違い

str()
repr()
オブジェクトを読み取り可能にする
オブジェクトを再現するために必要なコード
エンドユーザーへの出力を生成する
開発者向けの出力を生成する

クラスの__str__と__repr__を書くときは、上記の点を考慮する必要があります。


  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. Pythonで区切り文字strによって文字列を分割する方法は?

    PythonのStringクラスには、オプションの引数として区切り文字を受け取るsplit()というメソッドがあります。デフォルトの区切り文字は空白です。次のように使用できます: >>> 'aa-ab-ca'.split('-') ['aa', 'ab', 'ca'] >>> 'abc mno rst'.split(' ') ['abc', 'mno', 'rst'] この操作に正規表現を使用するこ