2017-08-18 6 views
0

reprの目標は明白であることを理解していますが、reprの動作は本当に私を混乱させます。上記のコードに基づいてPythonのreprメソッドの動作

repr('"1"') 
Out[84]: '\'"1"\'' 
repr("'1'") 
Out[85]: '"\'1\'"' 

、私はreprは単なる文字列の周りに''を置くと思います。 しかし、私はこの試してみてください。

repr('1') 
Out[82]: "'1'" 
repr("1") 
Out[83]: "'1'" 

reprは、文字列の周り""repr("1")を入れて、repr('1')は同じです。

なぜですか?

+0

reprを 'print'してみてください – damians

答えて

0

ここには3つのレベルの引用があります。

  1. あなたが渡している文字列内の引用符は、最初の例でのみ表示されます。

  2. reprによって生成された文字列の引用符。 reprはPythonコードとして動作する文字列表現を返そうとしているので、文字列を渡すと文字列の前後に引用符が追加されます。

  3. 出力を印刷する際にPythonインタプリタによって追加された引用符。これらはおそらくあなたを混乱させるものです。おそらく、タイプのオブジェクトが返されているというアイデアを得るために、あなたの通訳はreprを再度呼び出しています。そうでなければ、文字列1と数字1は同じに見えます。

    この余分なレベルの引用を取り除くには、reprによって生成された正確な文字列を確認するには、代わりにprint(repr(...))を使用します。あなたの入力が二回repr EDを取得しているので、

0

(あなたの場合とIpython)のpython REPLは、出力値のrepr()をプリントアウト。

これを回避するには、代わりに印刷してください。

>>> repr('1') # what you're doing 
"'1'" 
>>> print(repr('1')) # if you print it out 
'1' 
>>> print(repr(repr('1'))) # what really happens in the first line 
"'1'" 

対象となるrepr EDは、彼らがもともと何であったかは考えていないので、元の(外側)引用符が保存されないことがあります。 documentationから

0

のrepr(オブジェクト): オブジェクトの印刷可能な表現を含む文字列を返します。

したがって、Pythonに与えられた文字列を返して、そのオブジェクトを再作成することができます。

あなたの最初の例:

repr('"1"') # string <"1"> passed as an argument 
Out[84]: '\'"1"\'' # to create your string you need to type like '"1"'. 
# Outer quotes are just interpretator formatting 

あなたの第二の例:

repr("'1'") # you pass a string <'1'> 
Out[85]: '"\'1\'"' # to recreate it you have to type "'1'" or '\'1\'', 
# depending on types of quotes you use (<'> and <"> are the same in python 

最終、

repr('1') # you pass <1> as a string 
Out[82]: "'1'" # to make that string in python you type '1', right? 
repr("1") # you pass the same <1> as string 
Out[83]: "'1'" # to recreate it you can type either '1' or "1", does not matter. Hence the output. 

Iの両方の通訳と'または"に引用符を囲むreprセットはエスケープ最小限に抑えるために、コンテンツに応じて、その理由は、出力が異なりますので。

関連する問題