1. ホーム
  2. python

[解決済み] Pythonのrepr()関数を理解する

2022-04-27 23:31:54

質問

repr() オブジェクトの評価可能な文字列表現です(quot;eval()".が可能です)。 つまり、Pythonのオブジェクトに評価される文字列表現です。 オブジェクト)

言い換えれば

>>> x = 'foo'
>>> repr(x)
"'foo'"

質問です。

  1. を実行すると、なぜかダブルクォーテーションが表示されます。 repr(x) ? (私はそれらを得ることはありません を実行した場合 str(x) )
  2. なぜ 'foo' を実行すると eval("'foo'") であり、x ではない。 オブジェクトを作成できますか?

どのように解決するのですか?

>>> x = 'foo'
>>> x
'foo'

そこで、名前 x'foo' の文字列を使用します。例えば repr(x) を実行すると、インタープリタは 'foo' の代わりに x を呼び出して repr('foo') .

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr 実際にマジックメソッドを呼び出す __repr__x を与える。 文字列 の表現を含む。 'foo' に割り当てられた x . そのため 'foo' 文字列の内側 "" その結果 "'foo'" . の考え方は repr は,一連の記号を含む文字列を与え,それをインタプリタに入力すると,引数として repr .

>>> eval("'foo'")
'foo'

を呼び出すと eval("'foo'") と入力するのと同じです。 'foo' をインタープリターで実行します。これは外側の文字列の内容を直接入力するのと同じです "" をインタプリタに入力する。

>>> eval('foo')

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    eval('foo')
  File "<string>", line 1, in <module>
NameError: name 'foo' is not defined

を呼び出すと eval('foo') と入力するのと同じです。 foo をインタープリターで実行します。しかし foo 変数が利用できるため、例外が発生します。

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str は、単なるオブジェクトの文字列表現です(覚えておいてください。 x 変数が参照する 'foo' )であるため、この関数は文字列を返します。

>>> str(5)
'5'

整数の文字列表現 5'5' .

>>> str('foo')
'foo'

そして、文字列の文字列表現 'foo' は、同じ文字列 'foo' .