webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen! R und% r in Python?

Was ist, wie der Titel schon sagt, der Unterschied zwischen diesen beiden Flags? Es scheint, dass beide den Wert mit repr () in einen String konvertieren? Auch in dieser Codezeile:

"{0!r:20}".format("Hello")  

Was macht die 0 vor dem! R?

38
b_pcakes

%r Ist kein gültiger Platzhalter in den Formatierungsvorgängen str.format(). es funktioniert nur in alte % String-Formatierung . Es konvertiert das Objekt tatsächlich über die Funktion repr() in eine Darstellung.

In str.format() ist !r Das Äquivalent, aber dies bedeutet auch, dass Sie jetzt alle Formatcodes für eine Zeichenfolge verwenden können. Normalerweise ruft str.format() die Methode object.__format__() für das Objekt selbst auf, aber bei Verwendung von !r Wird stattdessen repr(object).__format__() verwendet.

Es gibt auch die Konverter !s Und (in Python 3) !a; Diese wenden die Konvertierungen str() und ascii() funktioniert zuerst.

Das vordere 0 Gibt an, welches Argument für die str.format() -Methode verwendet wird, um diesen Slot zu füllen. Das Positionsargument 0 ist in Ihrem Fall "Hello". Sie können auch benannte Argumente verwenden und Objekte als Schlüsselwortargumente übergeben:

"{greeting!r:20}".format(greeting="Hello")  

Sofern Sie nicht Python 2.6) verwenden, können Sie dies weglassen, da Slots ohne Indizes oder Namen automatisch nummeriert werden. Das erste {} Ist 0, Das zweite {} Nimmt das zweite Argument am Index 1 Usw.

64
Martijn Pieters