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__を書くときは、上記の点を考慮する必要があります。
-
Pythonのissuperset()
この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',
-
Pythonで区切り文字strによって文字列を分割する方法は?
PythonのStringクラスには、オプションの引数として区切り文字を受け取るsplit()というメソッドがあります。デフォルトの区切り文字は空白です。次のように使用できます: >>> 'aa-ab-ca'.split('-') ['aa', 'ab', 'ca'] >>> 'abc mno rst'.split(' ') ['abc', 'mno', 'rst'] この操作に正規表現を使用するこ