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?


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ć.


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.


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


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'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.