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?


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.


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.


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


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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.