71

%r次のステートメントの意味は何ですか?

print '%r' % (1)

、、について聞いたことがあると思いますが%s、聞いたことは%dあり%fません。

4

9 に答える 9

89

バックグラウンド:

Python には、オブジェクトを文字列に変換する組み込み関数が 2 つありstrますreprstrフレンドリーで人間が読める文字列であるはずです。reprオブジェクトのコンテンツに関する詳細情報を含めることになっています (整数の場合など、同じものを返す場合があります)。慣例により、== である別のオブジェクトに評価される Python 式がある場合、そのreprような式を返します。

>>> print repr('hi')
'hi' # ... とは対照的に、ここの引用符に注意してください。
>>> print str('こんにちは')
こんにちは

オブジェクトに対して式を返すことが意味をなさない場合は、repr< と > 記号で囲まれた文字列を返す必要があります<blah>

元の質問に答えるには:

%s<-> <->str
%rrepr

加えて:

__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
于 2010-03-01T08:48:07.943 に答える
21

オブジェクトを呼び出しrepr()、結果の文字列を挿入します。

于 2010-03-01T07:15:08.597 に答える
5

置換を。付きの文字列として出力しrepr()ます。

于 2010-03-01T07:15:47.443 に答える
5

上記の返信に追加すると、'%r'異種データ型のリストがあるシナリオで役立ちます。たとえば、list = [1, 'apple' , 2 , 'r','banana'] 明らかにこの場合、'%d'orを使用'%s'するとエラーが発生します。代わりに、'%r'これらすべての値を出力するために使用できます。

于 2015-03-27T09:33:05.727 に答える
0

ドキュメントの文字列フォーマット操作を参照してください。%sや%dなどは、Cなどの別の言語での動作に慣れている場合、期待した動作とは異なる場合があることに注意してください。

特に、%dまたは%fでより詳細に制御できる特別なフォーマット要件がない限り、%sはintおよびfloatでも適切に機能します。

于 2010-03-01T08:26:40.463 に答える