Pythonにおけるstr()、repr()、``の違い

2136 ワード

str()関数とrepr()関数は、任意のデータ型を文字型に変換しますが、それらの間にはいくつかの違いがあります.ネット上や書籍の多くはこのように説明されています.
関数str()は、値を人が読むのに適した形式に変換し、repr()は解釈器が読み取るための形式に変換するために使用される.
または、
str()関数で得られる文字列は読み取り可能であり、repr()関数で得られる文字列は、通常、オブジェクトを再取得するために使用することができる.通常obj=eval(repr(obj))という式が成立する.
実は今までrepr()関数に何か特別な用途があるのか分かりませんでしたが、自分の理解に基づいて以下のメモを書きます.str()関数とrepr()関数の使用例:
>>> str(5)
'5'
>>> repr(5)
'5'
>>> str(type(5))
""
>>> repr(type(5))
""
>>> str(5)==repr(5)
True
>>> str(type(5))==repr(type(5))
True

上記の例からstr()関数とrepr()関数の使用にどのような違いがあるのかは明らかではないので、ある程度str()関数とrepr()関数の機能は一致する.しかし、1つの文字列値をパラメータとしてそれぞれ2つの関数に持ち込むと、結果は異なります.
>>> str('abc')
'abc'
>>> repr('abc')
"'abc'"
>>> str('abc')==repr('abc')
False

上記の例では、str()関数値を使用して文字列変数を変換する場合、その値は変更されません.ただし、repr()関数に置き換えると、repr()関数は元の値の文字列表現のデリミタ引用符も文字列の構成部分に変換されます.次の例を見てみましょう.
>>> repr("abc")
"'abc'"
>>> repr("'abc'")
'"\'abc\'"'
>>> repr('''"'abc'"''')
'\'"\\\'abc\\\'"\''

多くのデリミタを表すためにrepr()関数は最後にエスケープ記号""を用いた.これまでstr()関数とrepr()関数が文字列を変換する際にこの違いがあることを発見しただけで、他の機能には違いはないようです(私の理解や調べた資料がまだ全面的ではないかもしれませんが、間違いがあれば指摘してください).さらに``演算子(これは2つの単一引用符ではなく、キーボードアルファベットキー領域の数字キー「1」の前のボタンであることに注意)について説明すると、この演算子の著者はrepr()と同じ役割を果たしているが、python 2バージョンでのみサポートされており、Python 3ではこのような使い方はキャンセルされている.以下の例はpython 2である.7.13でのプレゼンテーション.
>>> repr('abc')
"'abc'"
>>> `'abc'`
"'abc'"

以下の例はPython 3である.6.0でのプレゼンテーション.
>>> repr('abc')
"'abc'"
>>> `'abc'`
  File "", line 1
    `'abc'`
    ^
SyntaxError: invalid syntax

参考資料
『Pythonコアプログラミング』(第2版)人民郵便出版社出版発行