2012-06-22 21 views
9

Recientemente me encontré con la siguiente pieza de código. No parece válido debido a la única instancia de comillas triples, pero parece funcionar bien. ¿Alguien puede explicar lo que está pasando aquí?python cadena concatenación confusión

return ("Validation failed(%s): cannot calculate length " 
     "of %s.""" % (self.name, value))` 

Respuesta

9

Todas las cadenas se concatenan primero.

"" es una cadena vacía.

Las sustituciones se realizan.

+1

+1 2min más rápido – Mualig

+2

Seguramente nadie escribiría un código tan confuso. ¡Rechazo la premisa de la pregunta! – Felix

+1

Así que no se necesita espacio en blanco entre las cadenas concatenadas y la cadena vacía final, repetida en varios lugares en el código (puedo publicar un enlace para Felix), es solo una codificación pobre. –

1

Cuando usa String en varias líneas, puede agregar " para hacer que una salida de línea individual se concatene primero. Usted puede leer la línea como:

return ("Validation failed(%s): cannot calculate length " //1st line 
    "of %s." //2nd line 
    "" % (self.name, value)) //3rd line (empty) 
0

Si se puede modificar el código, tenga en cuenta que la sintaxis % para dar formato a cadenas se está convirtiendo en obsoleto. Debe utilizar str.format() si su versión de Python admite que:

return "Validation failed({0}): cannot calculate length of {1}.".format(self.name, value) 

Si tiene que abarcar varias líneas, utilice:

return ("Validation failed({0}): " + 
     "cannot calculate length of {1}.".format(self.name, value)) 
+0

Esto debería ser un comentario, ya que en realidad no responde a la pregunta; tampoco es necesario el '+', debido exactamente a la misma concatenación literal de cadena en el código original. – lvc

4

Se trata de Python string literal concatenation - esencialmente, literales de cadena que aparece justo al lado de cada uno otros son interpretados como una sola cadena:

>>> 'foo' 'bar' 
'foobar' 

en su ejemplo, tiene tres cadenas literales en una fila (el último es "", la cadena vacía) que se concatenan de esta manera, en lugar de un único literal de varias líneas que finaliza pero no se inicia con comillas triples.

+0

+1 para consultar la documentación. –