Como os booleanos são formatados em Strings em Python?

170

Vejo que não posso fazer:

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

em Python. Eu adivinhei %bpara b (oolean). Existe algo assim?

Juanjo Conti
fonte
1
O que você quer que seja o resultado? Verdadeiro e falso? Você quer '% s' então. % b, quando existe, é para binário (como na base-2).
Thomas Wouters
1
Ho sim! "% s" parece funcionar muito bem. Responda a esta pergunta e obtenha uma resposta selecionada. Eu costumava fazer "% s"% str (False). Que vergonha para mim :)
Juanjo Conti
3
link para a documentação relevante: docs.python.org/library/…
Mechanical_meat

Respostas:

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

Isso não é específico para valores booleanos - %rchama o __repr__método no argumento. %s(para str) também deve funcionar.

danben
fonte
2
Qual é a principal diferença entre %re %s?
Alston
22
Eu sempre tive essa distiction em mente, mas me corrija se estiver errado. % s (e, portanto, str ()) visam representar o objeto da maneira mais transparente possível para os seres humanos. % r (e, portanto, repr ()) visam representar o objeto da maneira mais transparente possível para python. Por exemplo, print(str("foo"))apenas imprime fooem uma nova linha. print(repr("foo"))no entanto, imprime 'foo'em uma nova linha, incluindo as aspas, pois é isso que você precisa digitar no interpretador python para obter o objeto correspondente ao argumento em python.
precisa saber é o seguinte
66

Se você deseja True Falseusar:

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

porque str(True)é 'True'e str(False)é 'False'.

ou se você deseja 1 0usar:

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

porque int(True)é 1e int(False)é 0.

Desintegr
fonte
18

Você também pode usar a classe Formatador de sequência

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

Estes são os resultados

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

Alguns dos %especificadores de tipo-formato ( %r, %i) não estão disponíveis. Para obter detalhes, consulte o Mini-idioma de especificação de formato.

Lobo
fonte
4
Observe que adicionar opções de formatação pode estragar tudo. Por exemplo {:_^5}, você receberá a '__1__'menos que você str(...)os booleanos.
Michael - Onde está Clay Shirky?
2
Você pode contornar os problemas com conversões de tipo como !s: '{!s:_^5}'.format(True)é'True_'
Michael - Onde está Clay Shirky
4

Para atualizar isso para o Python-3, você pode fazer isso

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

No entanto, se você realmente deseja formatar a string (por exemplo, adicione espaço em branco), encontra o Python convertendo o booleano no valor C subjacente (ou seja, um int), por exemplo

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

Para contornar isso, você pode moldar Truecomo uma corda, por exemplo

>>> "{:<8} {}".format(str(True), False)
'True     False'
irritable_phd_syndrom
fonte