Juanjo Conti
Veo que no puedo hacer:
"%b %b" % (True, False)
en Python. adivine %b
para b (ooleano). ¿Hay algo como esto?
>>> print "%r, %r" % (True, False)
True, False
Esto no es específico de los valores booleanos: %r
llama al __repr__
método sobre el argumento. %s
(por str
) también debería funcionar.
-
¿Cuál es la principal diferencia entre
%r
y%s
?– Alston
13 de septiembre de 2015 a las 8:17
-
Siempre tuve esta distinción en mente, pero corrígeme si me equivoco. %s (y por lo tanto str()) tienen como objetivo representar el objeto de la manera más transparente posible para los humanos. %r (y, por lo tanto, repr()) tiene como objetivo representar el objeto de la manera más transparente posible para python. Por ejemplo,
print(str("foo"))
simplemente imprimefoo
en una nueva línea.print(repr("foo"))
sin embargo huellas'foo'
en una nueva línea, incluidas las comillas, ya que eso es lo que necesita escribir en el intérprete de python para obtener el objeto correspondiente al argumento en python.– bobismijnnaam
21 de noviembre de 2015 a las 13:35
desintegrar
Si tu quieres True False
usar:
"%s %s" % (True, False)
porque str(True)
es 'True'
y str(False)
es 'False'
.
o si quieres 1 0
usar:
"%i %i" % (True, False)
porque int(True)
es 1
y int(False)
es 0
.
También puede usar el clase de formateador de hilo
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 de formato (%r
, %i
) no están disponibles. Para más detalles, consulte el Minilenguaje de especificación de formato
-
Tenga en cuenta que agregar opciones de formato puede arruinar esto. P.ej
{:_^5}
te atrapará'__1__'
a menos que ustedstr(...)
los booleanos.– Miguel
24 de abril de 2017 a las 16:38
-
Puede solucionar los problemas con conversiones de tipo como
!s
:'{!s:_^5}'.format(True)
es'True_'
– Miguel
18/01/2018 a las 17:20
Para actualizar esto para Python-3 puedes hacer esto
"{} {}".format(True, False)
Sin embargo, si realmente desea formatear la cadena (por ejemplo, agregar un espacio en blanco), encontrará que Python convierte el valor booleano en el valor C subyacente (es decir, un int), por ejemplo
>>> "{:<8} {}".format(True, False)
'1 False'
Para evitar esto, puedes lanzar True
como una cadena, por ejemplo
>>> "{:<8} {}".format(str(True), False)
'True False'
Refiriéndose a Interpolación de cadenas de Python
En Python 3.6, se ha agregado la interpolación de cadenas con un nuevo literal de cadena F prefijo
shouldBeTrue = True
print(f"shouldBeTrue={shouldBeTrue}")
Para ampliar la respuesta de phd, puede hacer todo eso sin str()
-ing sus booleanos en el format()
llamar. Hay algunos trucos extraños que puedes aprovechar para dar formato a los valores booleanos con el nuevo estilo de interpolación de cadenas. También funciona para cuerdas f.
El caso soso y trivial
'{},{}'.format(True, False) # 'True,False'
f'{True},{False}' # 'True,False'
El formateo convierte valores booleanos a enteros
Cualquier longitud de relleno funcionará.
'{:0},{:0}'.format(True, False) # '1,0'
f'{True:0},{False:0}' # '1,0'
'{:>5},{:>5}'.format(True, False) # ' 1, 0'
f'{True:>5},{False:>5}' # ' 1, 0'
coerción de cuerdas puede traer de vuelta el texto normal
Nota la !s
ahí. Este es el equivalente más directo a %s
. También hay !r
por __repr__()
y !a
para ASCII, pero no son particularmente interesantes para booleanos.
'{!s:>5},{!s:>5}'.format(True, False) # ' True,False'
f'{True!s:>5},{False!s:>5}' # ' True,False'
¿Cuál quieres que sea el resultado? ¿Verdadero y falso? Entonces quieres ‘%s’. %b, cuando existe, es para binario (como en base-2).
– Thomas Wouters
13 de febrero de 2010 a las 22:05
¡Ho, sí! “%s” parece funcionar bien. Responda esta pregunta y obtenga una respuesta seleccionada. Solía hacer “%s” % str(Falso). Me avergüenza 🙂
– Juanjo Conti
13 de febrero de 2010 a las 22:07
enlace a la documentación pertinente: docs.python.org/library/…
– carne_mecánica
13 de febrero de 2010 a las 23:07