2010-02-13 10 views
120

veo que no puedo hacer:¿Cómo se formatean los booleanos en Cadenas en Python?

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

en Python. Adiviné %b para b (oolean). ¿Hay algo como esto?

+1

¿Cuál es el resultado? ¿Verdadero y falso? Entonces quieres '% s'. % b, cuando existe, es para binario (como en base-2). –

+0

¡Ho sí! "% s" parece funcionar bien. Responda esta pregunta y obtenga una respuesta. Solía ​​hacer "% s"% str (False). Lástima de mí :) –

+3

enlace a la documentación pertinente: http://docs.python.org/library/stdtypes.html#string-formatting-operations – bernie

Respuesta

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

Esto no es específico de valores booleanos - %r llama al método __repr__ en el argumento. %s (para str) también debería funcionar.

+2

¿Cuál es la principal diferencia entre '% r' y'% s'? – Stallman

+8

Siempre tuve esta distensión en mente, pero corrígeme si me equivoco. % s (y por lo tanto str()) apuntan a representar el objeto de la forma más transparente posible para los humanos. % r (y por lo tanto repr()) apuntan a representar el objeto de la manera más transparente posible para python. Por ejemplo, 'print (str (" foo "))' simplemente imprime 'foo' en una nueva línea. 'print (repr (" foo "))' sin embargo imprime ''foo'' en una nueva línea, incluidas las comillas, ya que eso es lo que necesita para escribir en el intérprete de python para obtener el objeto correspondiente al argumento en python. – bobismijnnaam

50

Si desea True False uso:

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

porque str(True) es 'True' y str(False) es 'False'.

o si desea 1 0 uso:

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

porque int(True) es 1 y int(False) es 0.

8

También puede utilizar la cadena de Formatter class

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

Estos son los resultados

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

Algunos de los especificadores de tipo % -format (%r, %i) no están disponibles. Para obtener detalles, consulte Format Specification Mini-Language

+3

Tenga en cuenta que agregar opciones de formato [puede arruinarlo.] (Http://stackoverflow.com/q/36573222/241211) P. ej. '{: _^5}' te conseguirá ''__1 __' 'a menos que' str (...) 'los booleanos. – Michael

+2

Puedes [moverte] (https://stackoverflow.com/a/48326865/241211) los problemas con conversiones de tipo como '! S':' '{! S: _^5}'. Format (True) ' es ''True_'' – Michael

Cuestiones relacionadas