Как логические значения отформатированы в Strings в Python?

170

Я вижу, я не могу сделать:

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

в Python. Я догадался %bо б (оолеан). Есть ли что-то подобное?

Хуанхо Конти
источник
1
Что вы хотите, чтобы результат был? Правда и ложь? Вы хотите "% s" тогда. % b, если он существует, предназначен для двоичного файла (как в base-2).
Томас Воутерс
1
Хо да! "% s", кажется, работает просто отлично. Ответить на этот вопрос и получить ответ лекцию. Раньше я делал "% s"% str (False). Позор мне :)
Хуанхо Конти
3
ссылка на соответствующую документацию: docs.python.org/library/…
mechanical_meat

Ответы:

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

Это не относится к логическим значениям - %rвызывает __repr__метод для аргумента. %s(для str) также должно работать.

danben
источник
2
В чем основная разница между %rи %s?
Олстон
22
Я всегда думал об этом, но поправьте меня, если я ошибаюсь. % s (и, следовательно, str ()) стремятся представить объект максимально прозрачно для людей. % r (и, следовательно, repr ()) стремятся представить объект как можно более прозрачно для python. Например, print(str("foo"))просто печатает fooна новой строке. print(repr("foo"))однако печатает 'foo'на новой строке, включая кавычки, поскольку это то, что вам нужно ввести в интерпретаторе python, чтобы получить соответствующий объект для аргумента в python.
bobismijnnaam
66

Если вы хотите True Falseиспользовать:

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

потому что str(True)есть 'True'и str(False)есть 'False'.

или если вы хотите 1 0использовать:

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

потому что int(True)есть 1и int(False)есть 0.

Desintegr
источник
18

Вы также можете использовать класс 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);

Это результаты

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

Некоторые из %спецификаторов типа -format ( %r, %i) недоступны. Подробнее см. Спецификацию формата на мини-языке

волк
источник
4
Обратите внимание, что добавление параметров форматирования может испортить это. Например, {:_^5}вы получите, '__1__'если вы не str(...)булевы.
Майкл - Где Клэй Ширки
2
Вы можете обойти проблемы с преобразованием типов, как !s: '{!s:_^5}'.format(True)есть'True_'
Майкл - Где Клэй Ширки
5

Чтобы обновить это для Python-3, вы можете сделать это

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

Однако, если вы хотите отформатировать строку (например, добавить пробел), вы столкнетесь с тем, что Python преобразует логическое значение в базовое значение C (например, int), например

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

Чтобы обойти это, вы можете использовать Trueкак строку, например,

>>> "{:<8} {}".format(str(True), False)
'True     False'
irritable_phd_syndrom
источник