web-dev-qa-db-ja.com

pythonの%rの意味は何ですか

の意味は何ですか %r次の文で?

print '%r' % (1)

私は%s%d、および%fしかし、これを聞いたことがない。

61
photon

バックグラウンド:

Pythonには、オブジェクトを文字列に変換するための2つの組み込み関数があります: str vs. reprstrは、わかりやすく人間が読める文字列であると想定されています。 reprは、オブジェクトの内容に関する詳細情報を含むことになっています(整数の場合など、同じものを返す場合があります)。慣例により、==である別のオブジェクトに評価されるPython式がある場合、reprはそのような式を返します。

 >>> print repr( 'hi')
 'hi'#ここでは引用符に注意してください... 
 >>> print str( 'hi')
こんにちは

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

元の質問に答えるには:

%s <-> str
%r <-> repr

加えて:

__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
77
allyourcode

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

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

4
Xorlev

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

3
Hetal Patel

_%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'"
_
2
_%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'
_
0
sheldonzy

ドキュメントの String Formatting Operations を参照してください。 Cなどの別の言語で動作する方法に慣れている場合、%sや%dなどは、期待どおりに動作しない可能性があることに注意してください。

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

0
John La Rooy