158

repr(): オブジェクトの評価可能な文字列表現 (「eval()」できます。これは、Python オブジェクトに評価される文字列表現であることを意味します)

言い換えると:

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

質問:

  1. すると二重引用符が表示されるのはなぜrepr(x)ですか? (私がそうするとき、私はそれらを手に入れませんstr(x)
  2. オブジェクトである x ではなく、なぜ取得'foo'するのですか?eval("'foo'")
4

5 に答える 5

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

そのため、文字列に名前xが付けられ'foo'ます。たとえば、 を呼び出すと、インタープリターは代わりにrepr(x)putsを呼び出してから を呼び出します。'foo'xrepr('foo')

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

reprは実際に のマジック メソッド__repr__を呼び出し、に割り当てられた値の表現を含む文字列xを返します。したがって、文字列内に戻り、結果は. の考え方は、インタプリタに入力できる一連の記号を含む文字列を指定し、引数として に送信されたのと同じ値を取得することです。'foo'x'foo'"""'foo'"reprrepr

>>> 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'

また、 string の文字列表現は'foo'同じ string'foo'です。

于 2011-10-16T12:22:14.787 に答える
14

対話型インタープリターで得たフィードバックも使用しreprます。式を入力すると (それを としますexpr)、インタプリタは基本的に を行いresult = expr; if result is not None: print repr(result)ます。したがって、例の2行目、文字列を必要な表現にフォーマットしていfooます( 'foo')。そして、インタープリターはそのrepresentation を作成、二重引用符を残します。

%r を二重引用符と一重引用符のエスケープと組み合わせて出力すると、.py ファイルに書き込んだように出力されますが、見たい方法で出力されないのはなぜですか?

ここで何を尋ねているのかわかりません。single ' and double " quotesを実行すると、テキストにreprは、1 種類の引用のエスケープが含まれます。もちろんそうです。そうでなければ、Python の規則によって有効な文字列リテラルにはなりません。それはまさにあなたが を呼び出して求めたものですrepr

eval(repr(x)) == xまた、類推は文字通りの意味ではないことに注意してください。これは概算であり、ほとんどの (すべて?) 組み込み型に当てはまりますが、主なことは、repr出力を見ることで、型と論理的な「値」をかなりよく理解できるということです。

于 2011-10-16T12:17:27.520 に答える
9

str()エンドユーザー向けの出力を作成するためにrepr()使用され、開発中のデバッグに使用されます。そして、それはオブジェクトの公式表現です。

例:

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'

repr()出力から、日付オブジェクトの公式表現を示していることがわかります。

于 2018-04-08T12:05:25.463 に答える
3

1) の結果repr('foo')文字列 'foo'です。Python シェルでは、式の結果も表現として表現されるため、基本的にはrepr(repr('foo')).

2)eval式の結果を計算します。結果は常に(数値、文字列、オブジェクトなど) です。次のように、複数の変数が同じ値を参照できます。

x = 'foo'
y = x

x と y は同じ値を参照するようになりました。

3) あなたがここで何を言おうとしているのか、私にはわかりません。例を投稿して、何を見たいですか?

于 2011-10-16T12:14:23.017 に答える
1

あなたが言う時

foo = 'bar'
baz(foo)

foo関数に渡していませんbazfoo値を表すために使用される単なる名前であり、この場合'bar'は であり、その値が関数に渡されbazます。

于 2011-10-16T12:22:07.497 に答える