の意味は何ですか %r
次の文で?
print '%r' % (1)
私は%s
、%d
、および%f
しかし、これを聞いたことがない。
バックグラウンド:
Pythonには、オブジェクトを文字列に変換するための2つの組み込み関数があります: str
vs. repr
。 str
は、わかりやすく人間が読める文字列であると想定されています。 repr
は、オブジェクトの内容に関する詳細情報を含むことになっています(整数の場合など、同じものを返す場合があります)。慣例により、==である別のオブジェクトに評価されるPython式がある場合、repr
はそのような式を返します。
>>> print repr( 'hi') 'hi'#ここでは引用符に注意してください... >>> print str( 'hi') こんにちは
オブジェクトに対して式を返すことが意味をなさない場合、repr
は<および>記号で囲まれた文字列を返す必要があります。 <blah>
。
元の質問に答えるには:
加えて:
__str__
および __repr__
メソッドを実装することにより、独自のクラスのインスタンスが文字列に変換する方法を制御できます。
class Foo:
def __init__(self, foo):
self.foo = foo
def __eq__(self, other):
"""Implements ==."""
return self.foo == other.foo
def __repr__(self):
# if you eval the return value of this function,
# you'll get another Foo instance that's == to self
return "Foo(%r)" % self.foo
オブジェクトで repr()
を呼び出し、結果の文字列を挿入します。
置換をrepr()
の文字列として出力します。
上記の応答に加えて、'%r'
は、異種データ型のリストがあるシナリオで役立ちます。 list = [1, 'Apple' , 2 , 'r','banana']
があるとしましょう。明らかにこの場合、'%d'
または'%s'
を使用するとエラーが発生します。代わりに、'%r'
を使用してこれらすべての値を出力できます。
_%r
_と_%s
_の違いは、_%r
_はrepr()
メソッドを呼び出し、_%s
_はstr()
メソッドを呼び出します。これらは両方とも組み込みのPython関数です。
repr()
メソッドは、指定されたオブジェクトの印刷可能な表現を返します。 str()
メソッドは、指定されたオブジェクトの「非公式」または適切に印刷可能な表現を返します。
単純な言語では、str()
メソッドが行うことは、エンドユーザーが見たい方法で結果を出力することです。
_name = "Adam"
str(name)
Out[1]: 'Adam'
_
repr()
メソッドは、オブジェクトが実際にどのように見えるかを表示または表示します。
_name = "Adam"
repr(name)
Out[1]: "'Adam'"
_
_%s <=> str
%r <=> repr
_
_%r
_はオブジェクトで repr()
を呼び出し、___repr__
_によって返された結果の文字列を挿入します。
___repr__
_によって返される文字列は明確でなければならず、可能であれば、表現されているオブジェクトを再作成するために必要なソースコードと一致する必要があります。
簡単な例:
_class Foo:
def __init__(self, foo):
self.foo = foo
def __repr__(self):
return 'Foo(%r)' % self.foo
def __str__(self):
return self.foo
test = Foo('Text')
_
そう、
_in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'
_
ドキュメントの String Formatting Operations を参照してください。 Cなどの別の言語で動作する方法に慣れている場合、%sや%dなどは、期待どおりに動作しない可能性があることに注意してください。
特に、%sは、%dまたは%fでさらに制御できる特別なフォーマット要件がない限り、intおよびfloatでもうまく機能します。