Come vengono formattati i booleani in Stringhe in Python?


170

Vedo che non posso fare:

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

in Python. Ho indovinato %bper b (oolean). C'è qualcosa del genere?


1
Cosa vuoi che sia il risultato? Vero e falso? Allora vuoi '% s'. % b, quando esiste, è per binario (come in base-2).
Thomas Wouters,

1
Eh si! "% s" sembra funzionare bene. Rispondi a questa domanda e ottieni una risposta. Ero solito fare "% s"% str (Falso). Vergogna :)
Juanjo Conti,

3
collegamento alla documentazione pertinente: docs.python.org/library/…
Mechanical_meat

Risposte:


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

Questo non è specifico per i valori booleani: %rchiama il __repr__metodo sull'argomento. %s(per str) dovrebbe funzionare anche.


2
Qual è la differenza principale tra %re %s?
Alston,

22
Ho sempre avuto in mente questa distinzione, ma correggimi se sbaglio. % s (e quindi str ()) mirano a rappresentare l'oggetto nel modo più trasparente possibile per l'uomo. % r (e quindi repr ()) mirano a rappresentare l'oggetto nel modo più trasparente possibile per Python. Ad esempio, print(str("foo"))stampa semplicemente foosu una nuova riga. print(repr("foo"))tuttavia stampa 'foo'su una nuova riga, comprese le virgolette, poiché è quello che devi digitare nell'interprete python per ottenere l'oggetto corrispondente all'argomento in python.
bobismijnnaam,

66

Se vuoi True Falseusare:

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

perché str(True)è 'True'ed str(False)è 'False'.

o se vuoi 1 0usare:

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

perché int(True)è 1ed int(False)è 0.


18

È inoltre possibile utilizzare la classe di stringa 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);

Questi sono i risultati

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

Alcuni %specificatori del tipo di formato ( %r, %i) non sono disponibili. Per i dettagli, consultare la mini lingua delle specifiche del formato


4
Nota che l'aggiunta di opzioni di formattazione può rovinare tutto. Ad esempio, {:_^5}ti prenderà a '__1__'meno che tu non sia str(...)il booleano.
Michael - Dov'è Clay Shirky il

2
Puoi aggirare i problemi con le conversioni di tipo come !s: '{!s:_^5}'.format(True)is'True_'
Michael - Where's Clay Shirky

4

Per aggiornare questo per Python-3 puoi farlo

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

Tuttavia, se si desidera formattare effettivamente la stringa (ad es. Aggiungere uno spazio bianco), si incontra Python che lancia il booleano nel valore C sottostante (cioè un int), ad es.

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

Per ovviare a questo puoi lanciare Truecome una stringa, ad es

>>> "{:<8} {}".format(str(True), False)
'True     False'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.