Learn Python the Hard Way 21ページに、次のコード例を示します。
x = "There are %d types of people." % 10
...
print "I said: %r." % x
ここで%r
の代わりに%s
が使用されるのはなぜですか?いつ%r
を使用し、いつ%s
を使用しますか?
%s
指定子は str()
を使用してオブジェクトを変換し、%r
は repr()
を使用してオブジェクトを変換します。
整数などの一部のオブジェクトでは、同じ結果が得られますが、 repr()
は特殊です(これが可能な型の場合)。通常、有効な結果を返しますPython構文、それが表すオブジェクトを明確に再作成するために使用できます。
日付を使用した例を次に示します。
>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'
repr()
がPython構文を生成しない型には、file
などの外部リソースを指すものが含まれますが、異なるコンテキストで再作成することは保証できません。
デバッグには%r
を使用します。変数の「生の」データが表示されますが、他のユーザーはユーザーへの表示に使用されるためです。
これが%r
フォーマットの仕組みです。それはあなたが書いたように(またはそれに近いように)それを印刷します。デバッグ用の「生の」形式です。ここで、ユーザーに表示するために使用される\n
は機能しません。 %r
は、変数の生データの場合の表現を示します。
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months
出力:
Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'
この例 Learn Python the Hard Wayをチェックしてください。
%r
は引用符で表示されます:
次のようになります。
I said: 'There are 10 types of people.'.
%s
を使用した場合、次のようになります。
I said: There are 10 types of people..
これは、上記のBen Jamesの回答のバージョンです。
>>> import datetime
>>> x = datetime.date.today()
>>> print x
2013-01-11
>>>
>>>
>>> print "Today's date is %s ..." % x
Today's date is 2013-01-11 ...
>>>
>>> print "Today's date is %r ..." % x
Today's date is datetime.date(2013, 1, 11) ...
>>>
これを実行すると、%rの有用性がわかりました。