simbolo separar porcentaje por funcion concatenar caracter cadenas python string python-3.x string-formatting

separar - funcion format en python



Formato de cadena de Python con signo de porcentaje (3)

Estoy tratando de hacer exactamente lo siguiente:

>>> x = (1,2) >>> y = ''hello'' >>> ''%d,%d,%s'' % (x[0], x[1], y) ''1,2,hello''

Sin embargo, tengo una x larga, más de dos elementos, así que intenté:

>>> ''%d,%d,%s'' % (*x, y)

pero es un error de sintaxis. ¿Cuál sería la forma correcta de hacer esto sin indexar como el primer ejemplo?


Le sugiero que use str.format lugar de str % ya que es "más moderno" y también tiene un mejor conjunto de características. Dicho lo que quieres es:

>>> x = (1,2) >>> y = ''hello'' >>> ''{},{},{}''.format(*(x + (y,))) 1,2,hello

Para todas las características interesantes de format (y algunas relacionadas con % también), eche un vistazo a PyFormat .


Tal vez echar un vistazo a str.format() .

>>> x = (5,7) >>> template = ''first: {}, second: {}'' >>> template.format(*x) ''first: 5, second: 7''

Actualizar:

Para completar, también estoy incluyendo las generalizaciones de desempaque adicionales descritas por PEP 448 . La sintaxis extendida se introdujo en Python 3.5 , y lo siguiente ya no es un error de sintaxis:

>>> x = (5, 7) >>> y = 42 >>> template = ''first: {}, second: {}, last: {}'' >>> template.format(*x, y) # valid in Python3.5+ ''first: 5, second: 7, last: 42''

Sin embargo, en Python 3.4 y versiones anteriores , si desea pasar argumentos adicionales después de la tupla desempaquetada, probablemente sea mejor que los pase como argumentos con nombre :

>>> x = (5, 7) >>> y = 42 >>> template = ''first: {}, second: {}, last: {last}'' >>> template.format(*x, last=y) ''first: 5, second: 7, last: 42''

Esto evita la necesidad de construir una tupla nueva que contenga un elemento adicional al final.


str % .. acepta una tupla como un operando de mano derecha, por lo que puede hacer lo siguiente:

>>> x = (1, 2) >>> y = ''hello'' >>> ''%d,%d,%s'' % (x + (y,)) # Building a tuple of `(1, 2, ''hello'')` ''1,2,hello''

Su intento debería funcionar en Python 3. donde se admiten Additional Unpacking Generalizations , pero no en Python 2.x:

>>> ''%d,%d,%s'' % (*x, y) ''1,2,hello''