W jaki sposób wartości logiczne są formatowane w ciągach znaków w Pythonie?

170

Widzę, że nie mogę:

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

w Pythonie. Zgadłem %bna b (oolean). Czy jest coś takiego?

Juanjo Conti
źródło
1
Jaki ma być wynik? Prawda i fałsz? W takim razie chcesz „% s”. % b, jeśli istnieje, jest binarne (jak w bazie-2).
Thomas Wouters
1
Ho tak! "% s" wydaje się działać dobrze. Odpowiedz na to pytanie i uzyskaj wybraną odpowiedź. Kiedyś robiłem "% s"% str (fałsz). Wstyd mi :)
Juanjo Conti
3
link do odpowiedniej dokumentacji: docs.python.org/library/…
Mechanical_meat

Odpowiedzi:

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

To nie jest specyficzne dla wartości logicznych - %rwywołuje __repr__metodę na argumencie. %s(dla str) powinno również działać.

danben
źródło
2
Jaka jest główna różnica między %ri %s?
Alston,
22
Zawsze miałem to na myśli, ale popraw mnie, jeśli się mylę. % s (a tym samym str ()) ma na celu przedstawienie obiektu w jak najbardziej przejrzysty sposób dla ludzi. % r (a tym samym repr ()) ma na celu przedstawienie obiektu w jak najbardziej przejrzysty sposób dla Pythona. Na przykład print(str("foo"))po prostu drukuje foow nowej linii. print(repr("foo"))jednak wypisuje 'foo'w nowym wierszu, łącznie z cudzysłowami, ponieważ to właśnie musisz wpisać interpreter języka Python, aby uzyskać odpowiedni obiekt dla argumentu w pythonie.
bobismijnnaam
66

Jeśli chcesz True Falseużyć:

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

ponieważ str(True)jest 'True'i str(False)jest'False'.

lub jeśli chcesz 1 0użyć:

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

ponieważ int(True)jest 1i int(False)jest 0.

Rozpad
źródło
18

Możesz także użyć klasy String klasy Formatter

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);

Takie są wyniki

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

Niektóre %specyfikatory typu -format ( %r, %i) nie są dostępne. Aby uzyskać szczegółowe informacje, zobacz Mini-język specyfikacji formatu

Wilk
źródło
4
Pamiętaj, że dodanie opcji formatowania może to zepsuć. Np. {:_^5}Dostaniesz, '__1__'chyba że jesteś str(...)logicznym.
Michael - Where's Clay Shirky
2
Możesz obejść problemy z konwersjami typów, takie jak !s: '{!s:_^5}'.format(True)is'True_'
Michael - Where's Clay Shirky
4

Aby zaktualizować to dla Python-3, możesz to zrobić

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

Jeśli jednak chcesz faktycznie sformatować ciąg (np. Dodać spację), napotkasz Pythona rzutującego wartość logiczną na podstawową wartość C (tj.

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

Aby obejść ten problem, możesz zarzucić Truejako sznurek, np

>>> "{:<8} {}".format(str(True), False)
'True     False'
irritable_phd_syndrom
źródło