web-dev-qa-db-ja.com

Pythonで%sの代わりに%rを使用する場合

Learn Python the Hard Way 21ページに、次のコード例を示します。

x = "There are %d types of people." % 10
...
print "I said: %r." % x

ここで%rの代わりに%sが使用されるのはなぜですか?いつ%rを使用し、いつ%sを使用しますか?

157
coffee-grinder

%s指定子は str() を使用してオブジェクトを変換し、%rrepr() を使用してオブジェクトを変換します。

整数などの一部のオブジェクトでは、同じ結果が得られますが、 repr() は特殊です(これが可能な型の場合)。通常、有効な結果を返しますPython構文、それが表すオブジェクトを明確に再作成するために使用できます。

日付を使用した例を次に示します。

>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'

repr() がPython構文を生成しない型には、fileなどの外部リソースを指すものが含まれますが、異なるコンテキストで再作成することは保証できません。

302
Ben James

デバッグには%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をチェックしてください。

15
Pramod Bhat

%rは引用符で表示されます:

次のようになります。

I said: 'There are 10 types of people.'.

%sを使用した場合、次のようになります。

I said: There are 10 types of people..
15
manojlds

これは、上記の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の有用性がわかりました。

14
macloo