2009-10-05 5 views
28

¿Cómo se debe cambiar esta función para devolver "123456"?¿Cómo funciona la cadena de comillas triples de Python?

def f(): 
    s = """123 
    456""" 
    return s 

ACTUALIZACIÓN: Todo el mundo, la pregunta es sobre la comprensión de cómo no tiene \ t o lo que sea al tener un comentario de varias líneas, no la forma de utilizar el módulo re.

+2

¿Es esta tarea? Sugerencia: Su cadena es "123 456" –

+7

Esto no es tarea. Estoy tratando de entender cómo '" "" 'funciona. –

+0

¿Pero cómo no tengo el \ t en él? –

Respuesta

50

No utilice una secuencia de comillas triples cuando no desee espacios en blanco, pestañas y saltos de línea adicionales.

Uso continuación implícita, es más elegante:

def f(): 
    s = ('123' 
     '456') 
    return s 
+1

Esto solía ser algo natural para mí, pero no cuando tuve que conectar valores variables usando a ex:% s, pero alas, incluso las siguientes obras: 's = ('String% s'' ''Cadena% s')% ('foo', 'bar')' – Spade

6

Tal vez me estoy perdiendo algo obvio, pero ¿qué pasa con esto:

def f(): 
    s = """123456""" 
    return s 

o simplemente esto:

def f(): 
    s = "123456" 
    return s 

o incluso más simple:

def f(): 
    return "123456" 

Si eso no lo hace responda su pregunta, luego aclare de qué se trata la pregunta.

+0

Acerca de la comprensión cómo no tener \ t o lo que sea cuando tenga un comentario de líneas múltiples. –

+9

Una cadena de comillas triples no es un comentario de líneas múltiples, es una cadena sin formato, y contiene exactamente lo que se escribe en ella. – JimB

+0

Soy corregido. –

-1
re.sub('\D+', '', s) 

devolverá una cadena, si quieres un entero, convertir esta cadena con int.

-1

Trate

import re 

y luego

return re.sub("\s+", "", s) 
-4

Mi conjetura es:

def f(): 
    s = """123 
    456""" 
    return u'123456' 

Cambio mínimo y hace lo que se le pide.

+7

:-) Quien haya votado negativamente esto no tiene sentido del humor – foosion

+0

Probablemente fue downvoted porque se suponía que la función devolvería una cadena. – recursive

+0

Tienes razón, probablemente tiene que devolver una cadena y devolví un número entero, de todas formas tampoco recibí la respuesta negativa, soy nuevo en python – Juparave

16
def f(): 
    s = """123\ 
456""" 
    return s 

No sangrar ninguna de las líneas de compases de bloque después de la primera línea; termine cada línea excepto la última con una barra invertida.

+1

+1: aunque no me gustan las barras basculantes: podría usar replace ('\ n', '') – van

+0

... y no {{{return s.replace ('\ n ',' ')}}}, sino más bien en la asignación en sí: {{{456 "" ". replace (' \ n ',' ')}}} – van

14

cadenas posteriores son concatenados, por lo que se pueden utilizar:

def f(): 
    s = ("123" 
     "456") 
    return s 

Esto le permitirá mantener la sangría como desee.

+0

+1 - pásamelo – PaulMcG

+0

Nota para OP - no hay coma entre "123" y "456". Los() están ahí para evitar tener que usar '\' para las continuas de línea. – PaulMcG

9
textwrap.dedent("""\ 
       123 
       456""") 

de la librería estándar. Primero es necesario "\" porque esta función funciona eliminando el espacio en blanco inicial común.

+0

No responde la pregunta , pero responde a la consulta de Google. En realidad, se le preguntó en: http://stackoverflow.com/questions/1412374/python-triple-quote-multi-line-indentation –

0

Es posible que desee comprobar esto str.splitlines([keepends])

devolver una lista de las líneas de la cadena, rompiendo en los límites de la línea. Este método utiliza el enfoque de líneas nuevas universales para dividir líneas. Saltos de línea no se incluyen en la lista resultante a menos que keepends sea dado y verdadero.

Python reconoce "\ r", "\ n" y "\ r \ n" como límites de línea para cadenas de 8 bits.

Así, para el problema en cuestión ... podríamos hacer somehting como esto ..

>>> s = """123 
... 456""" 
>>> s 
'123\n456' 
>>> ''.join(s.splitlines()) 
'123456' 
Cuestiones relacionadas