repr()
: オブジェクトの評価可能な文字列表現 (「eval()」できます。これは、Python オブジェクトに評価される文字列表現であることを意味します)
言い換えると:
>>> x = 'foo'
>>> repr(x)
"'foo'"
質問:
- すると二重引用符が表示されるのはなぜ
repr(x)
ですか? (私がそうするとき、私はそれらを手に入れませんstr(x)
) - オブジェクトである x ではなく、なぜ取得
'foo'
するのですか?eval("'foo'")
>>> x = 'foo'
>>> x
'foo'
そのため、文字列に名前x
が付けられ'foo'
ます。たとえば、 を呼び出すと、インタープリターは代わりにrepr(x)
putsを呼び出してから を呼び出します。'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'
また、 string の文字列表現は'foo'
同じ string'foo'
です。
対話型インタープリターで得たフィードバックも使用しrepr
ます。式を入力すると (それを としますexpr
)、インタプリタは基本的に を行いresult = expr; if result is not None: print repr(result)
ます。したがって、例の2行目は、文字列を必要な表現にフォーマットしていfoo
ます( 'foo'
)。そして、インタープリターはそのrepr
esentation を作成し、二重引用符を残します。
%r を二重引用符と一重引用符のエスケープと組み合わせて出力すると、.py ファイルに書き込んだように出力されますが、見たい方法で出力されないのはなぜですか?
ここで何を尋ねているのかわかりません。single ' and double " quotes
を実行すると、テキストにrepr
は、1 種類の引用のエスケープが含まれます。もちろんそうです。そうでなければ、Python の規則によって有効な文字列リテラルにはなりません。それはまさにあなたが を呼び出して求めたものですrepr
。
eval(repr(x)) == x
また、類推は文字通りの意味ではないことに注意してください。これは概算であり、ほとんどの (すべて?) 組み込み型に当てはまりますが、主なことは、repr
出力を見ることで、型と論理的な「値」をかなりよく理解できるということです。
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()
出力から、日付オブジェクトの公式表現を示していることがわかります。
1) の結果repr('foo')
は文字列 'foo'
です。Python シェルでは、式の結果も表現として表現されるため、基本的にはrepr(repr('foo'))
.
2)eval
式の結果を計算します。結果は常に値(数値、文字列、オブジェクトなど) です。次のように、複数の変数が同じ値を参照できます。
x = 'foo'
y = x
x と y は同じ値を参照するようになりました。
3) あなたがここで何を言おうとしているのか、私にはわかりません。例を投稿して、何を見たいですか?
あなたが言う時
foo = 'bar'
baz(foo)
foo
関数に渡していませんbaz
。 foo
値を表すために使用される単なる名前であり、この場合'bar'
は であり、その値が関数に渡されbaz
ます。