4

だから私はこのコードを持っています:

    formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")

そして、私はこの出力を取得します:

1 2 3 4

'1 2 3 4'


私の質問は:

出力の2行目に一重引用符が含まれているのはなぜですか?%r変換タイプが実際にどのように機能するかはよくわかりません。

コードを次のように変更すると:

formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print "%s %s %s %s" % ("one", "two", "three", "four")

私はこの結果を得る:

1 2 3 4

1 2 3 4

なぜそれらが異なって機能するのか理解できません。誰かが私のためにそれを分解できますか?


もう読んだ:

http://docs.python.org/library/stdtypes.html& _

http://docs.python.org/library/functions.html#repr

4

2 に答える 2

2

式を使用する'abc%rdef' % objと、パーツ'%r'は次のように置き換えられます。repr(obj)

式を使用する'ABC%sDEF' % objと、パーツ'%s'は次のように置き換えられます。str(obj)

repr()は、一般的なオブジェクトの場合、 repr()関数に引数として渡されるオブジェクトを定義するためにスクリプトで記述する文字列と同じ文字列を返す関数です。

多くのタイプの場合、この関数は、eval() http://docs.python.org/library/functions.html#reprに渡されたときに同じ値のオブジェクトを生成する文字列を返そうとし ます。

例1

によって定義されたリストを検討する場合li = [12,45,'haze']

print li[ 12,45 、'ヘイズ']を出力します

print repr(li)また、[12,45、'haze']も出力します。これは、この値でリストli[12,45,'haze']を定義するためにスクリプトに書き込まれる文字のシーケンスであるためです。

例2

で定義された文字列を検討する場合ss = 'oregon'

print ss引用符なしでオレゴンを印刷します

print repr(ss)プログラムで値oregonを使用して文字列ssを定義する場合は、スクリプトで記述しなければならない文字のシーケンスであるため、'oregon'を出力します。'oregon'

つまり、これは、実際には、一般的なオブジェクトの場合、repr()str()は、文字列オブジェクトを除いて、一般的に等しい文字列を返すことを意味します。そのため、 repr()は文字列オブジェクトにとって特に興味深いものになります。たとえば、HTMLコードの内容を分析すると非常に便利です。

于 2011-08-28T13:57:41.277 に答える
0

%sstr()タプルの各要素で関数を呼び出すようにPythonに指示します。タプルの各要素で関数%rを呼び出すようにPythonに指示します。repr()

ドキュメントによる:

str()

オブジェクトの適切に印刷可能な表現を含む文字列を返します。文字列の場合、これは文字列自体を返します。

repr()

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

つまり、呼び出すオブジェクトがrepr()文字列オブジェクト(Pythonではすべてがオブジェクト)の場合、さまざまな文字がどのように表現されているかがわかります。

@あなたの特定の質問:「...」はそれが文字列であることを示していると思います。intでrepr()を呼び出すと、「...」はありません。

于 2011-08-28T13:12:52.847 に答える