Wie werden Boolesche Werte in Strings in Python formatiert?

170

Ich sehe, ich kann nicht:

"%b %b" % (True, False)

in Python. Ich vermutete %bfür b (oolean). Gibt es so etwas?

Juanjo Conti
quelle
1
Was soll das Ergebnis sein? Richtig und falsch? Sie wollen dann '% s'. % b ist, wenn es existiert, für binär (wie in Basis-2).
Thomas Wouters
1
Ho ja! "% s" scheint gut zu funktionieren. Beantworten Sie diese Frage und erhalten Sie eine ausgewählte Antwort. Ich habe "% s"% str (False) gemacht. Schande über mich :)
Juanjo Conti
3
Link zur relevanten Dokumentation: docs.python.org/library/…
mechanisches_fleisch

Antworten:

247
>>> print "%r, %r" % (True, False)
True, False

Dies ist nicht spezifisch für boolesche Werte - %rruft die __repr__Methode für das Argument auf. %s(für str) sollte auch funktionieren.

danben
quelle
2
Was ist der Hauptunterschied zwischen %rund %s?
Alston
22
Ich hatte immer diese Unterscheidung im Sinn, aber korrigiere mich, wenn ich falsch liege. % s (und damit str ()) zielen darauf ab, das Objekt für den Menschen so transparent wie möglich darzustellen. % r (und damit repr ()) zielen darauf ab, das Objekt für Python so transparent wie möglich darzustellen. Druckt beispielsweise print(str("foo"))nur fooin einer neuen Zeile. print(repr("foo"))Es wird jedoch 'foo'in einer neuen Zeile gedruckt , einschließlich der Anführungszeichen, da Sie den Python-Interpreter eingeben müssen, um das entsprechende Objekt für das Argument in Python zu erhalten.
Bobismijnnaam
66

Wenn Sie verwenden möchten True False:

"%s %s" % (True, False)

weil str(True)ist 'True'und str(False)ist 'False'.

oder wenn Sie verwenden möchten 1 0:

"%i %i" % (True, False)

weil int(True)ist 1und int(False)ist 0.

Desintegr
quelle
18

Sie können auch die Formatter- Zeichenfolgenklasse verwenden

print "{0} {1}".format(True, False);
print "{0:} {1:}".format(True, False);
print "{0:d} {1:d}".format(True, False);
print "{0:f} {1:f}".format(True, False);
print "{0:e} {1:e}".format(True, False);

Das sind die Ergebnisse

True False
True False
1 0
1.000000 0.000000
1.000000e+00 0.000000e+00

Einige der %Typ-Typ-Bezeichner ( %r, %i) sind nicht verfügbar. Einzelheiten finden Sie in der Mini-Sprache der Formatspezifikation

Wolf
quelle
4
Beachten Sie, dass das Hinzufügen von Formatierungsoptionen dies vermasseln kann. ZB {:_^5}bekommst du es nur, '__1__'wenn du str(...)die Booleschen bist.
Michael - Wo ist Clay Shirky
2
Sie können umgehen die Probleme mit Typumwandlungen wie !s: '{!s:_^5}'.format(True)ist'True_'
Michael - Wo ist Clay Shirky
4

Um dies für Python-3 zu aktualisieren, können Sie dies tun

"{} {}".format(True, False)

Wenn Sie die Zeichenfolge jedoch tatsächlich formatieren möchten (z. B. Leerzeichen hinzufügen), stößt Python auf die Umwandlung des Booleschen Werts in den zugrunde liegenden C-Wert (z. B. ein Int), z

>>> "{:<8} {}".format(True, False)
'1        False'

Um dies zu umgehen, können Sie Trueeine Zeichenfolge verwenden, z

>>> "{:<8} {}".format(str(True), False)
'True     False'
irritable_phd_syndrom
quelle