Entonces, tengo este problema. Tengo una tupla (1,2,3) que debo imprimir con formato de cadena. p.ej.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
y esto debería imprimir la representación de tuplas entre paréntesis, como
Esta es una tupla (1,2,3)
Pero en su lugar me sale TypeError: not all arguments converted during string formatting
.
¿Cómo puedo hacer esto? Un poco perdido aquí, así que si ustedes pudieran señalarme en la dirección correcta :)
print(....)
.Tenga en cuenta que la
%
sintaxis es obsoleta. Usostr.format
, que es más simple y más legible:fuente
%
es obsoleto, pero ahora siempre eres tú destr.format
todos modos, a ciegas. No importa eso, estoy interesado en cuál es el calificador completo, porque lo simple{0}
no es el calificador completo, sino simplemente un indicador de posición. Por un ladoint
, lo que yo llamo el calificador completo sería{0:d}
(o{3:d}
por ejemplo, si el int que se imprimirá se produce en la cuarta posición delstr.format
método). Intenté imprimir una tupla usando el{0:s}
calificador pero no funciona. Entonces, ¿cuál es el calificador completo para algo como una tupla?str
, puede decirlo{!s}
, pero este es el valor predeterminado, por lo que no es necesario. Si quieres usarlorepr
, puedes hacerlo{!r}
. A diferencia de%
, no hay necesidad de decird
números enteros.%
no es completamente obsoleto. De hecho,pylint
incluso se quejará si usa la.format
sintaxis dentro dellogging
módulo: stackoverflow.com/a/34634301/534238Muchas respuestas dadas anteriormente fueron correctas. La forma correcta de hacerlo es:
Sin embargo, hubo una disputa sobre si el
'%'
operador String es obsoleto. Como muchos han señalado, definitivamente no es obsoleto, ya que el'%'
operador String es más fácil de combinar una instrucción String con una lista de datos.Ejemplo:
Sin embargo, utilizando la
.format()
función, terminará con una declaración detallada.Ejemplo:
Adicionalmente,
'%'
operador de cadena también es útil para nosotros para validar el tipo de datos tales como%s
,%d
,%i
, mientras que .formato () sólo admiten dos indicadores de conversión :'!s'
y'!r'
.fuente
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Tenga en cuenta que
(tup,)
es una tupla que contiene una tupla. La tupla externa es el argumento para el operador%. La tupla interna es su contenido, que en realidad está impreso.(tup)
es una expresión entre paréntesis, que cuando se evalúa da como resultadotup
.(tup,)
con la coma final es una tupla, que contienetup
como único miembro.fuente
Esto no utiliza el formato de cadena, pero debería poder hacer:
Si realmente quieres usar el formato de cadena:
Tenga en cuenta que esto supone que está utilizando una versión de Python anterior a la 3.0.
fuente
fuente
Aunque esta pregunta es bastante antigua y tiene muchas respuestas diferentes, todavía me gustaría agregar la respuesta más "pitónica" y también legible / concisa.
Dado que
tuple
Antimony ya muestra correctamente el método de impresión general , esta es una adición para imprimir cada elemento en una tupla por separado, como Fong Kah Chun ha mostrado correctamente con la%s
sintaxis.Curiosamente, solo se ha mencionado en un comentario, pero el uso de un operador de asterisco para desempaquetar la tupla produce una flexibilidad y legibilidad completas utilizando el
str.format
método al imprimir elementos de tupla por separado .Esto también evita imprimir una coma final cuando se imprime una tupla de un solo elemento, como lo evitó Jacob CUI con
replace
. (Aunque en mi opinión, la representación de coma final es correcta si desea conservar la representación de tipo al imprimir ):fuente
Creo que la mejor manera de hacer esto es:
Si está familiarizado con el formato de estilo printf , Python admite su propia versión. En Python, esto se hace usando el operador "%" aplicado a las cadenas (una sobrecarga del operador de módulo), que toma cualquier cadena y le aplica el formato de estilo printf.
En nuestro caso, le estamos diciendo que imprima "Esto es una tupla:", y luego agregamos una cadena "% s", y para la cadena real, estamos pasando una representación de cadena de la tupla (llamando a str ( t)).
Si no está familiarizado con el formato de estilo printf, le recomiendo que aprenda, ya que es muy estándar. La mayoría de los idiomas lo admiten de una forma u otra.
fuente
Tenga en cuenta que se agregará una coma final si la tupla solo tiene un elemento. p.ej:
y obtendrás:
en algunos casos, por ejemplo, desea obtener una lista citada para ser utilizada en la cadena de consulta mysql como
debe considerar eliminar la coma de colas, use replace (',)', ')') después de formatear porque es posible que la tupla tenga solo 1 elemento como ('Tom',), por lo que la coma de colas debe eliminarse:
Sugiera si tiene una forma decente de eliminar esta coma en la salida.
fuente
format()
en consultas de bases de datos. Existen métodos aplicables para esto en cada biblioteca.format()
con valores recopilados de los usuarios puede resultar en inyección SQL Es más seguro validar los valores de entrada antes de colocarlos en la consulta. Consulte estas pautas para obtener más información: dev.mysql.com/doc/connector-python/en/… También puede emitir valores de parámetros a una representación de cadena de tipo de base de datos y luego pegarla en la cadena de consulta. Eche un vistazo a initd.org/psycopg/docs/usage.html donde tiene un contraejemplo con%
operador y una solución conexecute()
método donde los parámetros de consulta se pasan en argumentos de método.Además de los métodos propuestos en las otras respuestas, desde Python 3.6 también puede usar Literal String Interpolation (f-strings):
fuente
Intenta esto para obtener una respuesta:
Si ponemos solo una tupla dentro (), se crea una tupla en sí misma:
Esto significa que la declaración de impresión anterior se verá así: print ("Valor:% s"% ('1', '2')) ¡lo cual es un error!
Por lo tanto:
Lo anterior se alimentará correctamente a los argumentos de la impresión.
fuente
Para python 3
fuente
Puedes probar este también;
No se puede utilizar
%something
con(tup)
sólo por concepto de embalaje y desembalaje con tupla.fuente
Hablar es barato, muéstrale el código:
fuente