web-dev-qa-db-ja.com

python 2.7.5のstr()vs repr()関数

python 2.7.5)のstr()repr()関数の違いは何ですか?

Python.orgの説明:

str()関数は、かなり人間が読むことができるである値の表現を返すことを意図していますが、repr()インタプリタによる読み取り(または同等の構文がない場合はSyntaxErrorを強制します)

しかし、それは私には明らかではありませんでした。

いくつかの例:

_>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"      # repr is giving an extra double quotes
>>> str(1.0/7.0)
'0.142857142857'
>>> repr(1.0/7.0)
'0.14285714285714285'  # repr is giving value with more precision
_

だから私は次のことを知りたい

  1. いつstr()を使用すべきか、いつrepr()を使用すべきか?
  2. どちらの場合に使用できますか?
  3. str()は何ができますか?repr()はできませんか?
  4. repr()は何ができますか?str()はできませんか?
28
AnV

Str()をいつ使用し、repr()を使用する必要がありますか?

エンドユーザー向けの出力を作成するときは、ほとんど常にstr()を使用します。

repr()は、主にデバッグと探索に役立ちます。たとえば、文字列に非印刷文字が含まれていると思われる場合、またはfloatに小さな丸めエラーがある場合、repr()が表示されます。 str()はできません。

repr()は、ソースコードに貼り付けるリテラルを生成するのにも役立ちます。永続化にも使用できます(_ast.literal_eval_またはevalを使用)。しかし、これはめったに良いアイデアではありません。それらを編集する予定はありません。pickleを使用してください。

2.どの場合にどちらを使用できますか?

さて、あなたはcanほとんどどこでもそれらを使用します。 should n'tは、上記の場合を除き、一般的に使用します。

3. str()でできることrepr()でできないこと

エンドユーザーの消費に適した出力を提供します-常にではありません(たとえば、str(['spam'、 'eggs'])はGUIに入れたいものではない可能性が高いですが、repr()

4. repr()でできることstr()でできないこと

デバッグに役立つ出力を提供します。これも、常にではなく(ユーザーが作成したクラスのインスタンスの既定値が役立つことはめったにありません)、可能であればいつでも行います。

また、有効なPythonリテラルまたはその他の式である出力を提供することもありますが、インタラクティブな探索を除いて、これに依存することはほとんどありません。

30
abarnert