%r
次のステートメントの意味は何ですか?
print '%r' % (1)
、、について聞いたことがあると思いますが%s
、聞いたことは%d
あり%f
ません。
バックグラウンド:
Python には、オブジェクトを文字列に変換する組み込み関数が 2 つありstr
ますrepr
。str
フレンドリーで人間が読める文字列であるはずです。repr
オブジェクトのコンテンツに関する詳細情報を含めることになっています (整数の場合など、同じものを返す場合があります)。慣例により、== である別のオブジェクトに評価される Python 式がある場合、そのrepr
ような式を返します。
>>> print repr('hi') 'hi' # ... とは対照的に、ここの引用符に注意してください。 >>> print str('こんにちは') こんにちは
オブジェクトに対して式を返すことが意味をなさない場合は、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'
orを使用'%s'
するとエラーが発生します。代わりに、'%r'
これらすべての値を出力するために使用できます。
ドキュメントの文字列フォーマット操作を参照してください。%sや%dなどは、Cなどの別の言語での動作に慣れている場合、期待した動作とは異なる場合があることに注意してください。
特に、%dまたは%fでより詳細に制御できる特別なフォーマット要件がない限り、%sはintおよびfloatでも適切に機能します。