Яким чином булеві форматуються в Strings на Python?


170

Я бачу, що не можу:

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

в Python. Я здогадався %bдля b (oolean). Чи є щось подібне?


1
Яким ви хочете, щоб результат був? Правда і хибність? Тоді ви хочете "% s". % b, якщо він існує, призначений для двійкових (як у базі-2).
Thomas Wouters

1
Хо так! Здається, "% s" працює нормально. Дайте відповідь на це запитання і отримайте відповідь, що надається. Я раніше робив "% s"% str (помилково). Ганьба мені :)
Хуанхо Конті

3
посилання на відповідну документацію: docs.python.org/library / ...
mechanical_meat

Відповіді:


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

Це не властиво булевим значенням - %rвикликає __repr__метод на аргументі. %s(для str) також повинен працювати.


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.


18

Ви також можете використовувати клас форматів рядка

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

Деякі %специфікатори типу -формату ( %r, %i) недоступні. Докладніше див. Міні-мова специфікації формату


4
Зауважте, що додавання параметрів форматування може налагодити це. Наприклад, {:_^5}ви отримаєте, '__1__'якщо ви не str(...)булі.
Майкл - Де Клей Ширкий

2
Ви можете подолати проблеми з конверсіями типу !s: '{!s:_^5}'.format(True)є'True_'
Майкл - Де Клей Ширкий

4

Щоб оновити це для Python-3, ви можете це зробити

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

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

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

Щоб обійти це, ви можете подати Trueу вигляді рядка, наприклад

>>> "{:<8} {}".format(str(True), False)
'True     False'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.