2.4. Cadenas

Una cadena es una secuencia de caracteres Unicode escrita entre comillas. Las comillas simples y las dobles son equivalentes: elige el estilo que te permita evitar escapar las comillas que aparecen dentro del texto:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Las cadenas con triple comilla ("""...""" o '''...''') abarcan varias líneas y conservan los saltos de línea de forma literal:

banner = """boot ok
firmware v1.28
"""
print(banner)

Salida:

boot ok
firmware v1.28

2.4.1. Secuencias de escape

Dentro de una cadena normal, \ introduce un carácter especial:

  • \n – salto de línea

  • \t – tabulación

  • \\ – una barra invertida literal

  • \' / \" – una comilla literal (cuando de otro modo terminaría la cadena)

  • \xHH – el carácter con el código hexadecimal HH

  • \uHHHH – el punto de código Unicode HHHH

Cuando una cadena contiene muchas barras invertidas, antepón el prefijo r al literal para convertirla en una cadena cruda (raw). Las barras invertidas se toman entonces de forma literal: \n se queda con dos caracteres en lugar de reemplazarse por un salto de línea:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Concatenación y repetición

Dos cadenas se unen con +; una cadena se repite con *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

El uso repetido de + en un bucle reserva una cadena nueva en cada iteración. Para construir cadenas más grandes a partir de muchas piezas, usa str.join().

2.4.3. Longitud, indexación y segmentación

len() devuelve el número de caracteres de una cadena. La indexación con [] devuelve una cadena de un solo carácter en la posición dada; los índices negativos cuentan desde el final:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

Una porción (slice) s[start:stop] devuelve la subcadena desde la posición start hasta stop, sin incluir esta última. Cualquiera de los dos extremos puede omitirse para indicar «el principio» o «el final», y un tercer valor opcional s[start:stop:step] te permite saltar caracteres.

La cadena "OpenMV" con marcadores de posición entre cada carácter, que ilustra cómo una porción selecciona los caracteres entre dos posiciones.

Las posiciones de las porciones se sitúan entre los caracteres. s[2:5] selecciona los caracteres en las posiciones 2, 3 y 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

Una porción fuera de rango devuelve silenciosamente la parte que exista: s[100:200] es la cadena vacía "", no un error. La indexación fuera de rango, en cambio, lanza IndexError.

2.4.4. Inmutabilidad

Las cadenas no se pueden modificar en el sitio. Las operaciones que parecen mutar una cadena en realidad devuelven una cadena nueva y dejan la original intacta:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Para «cambiar» una cadena, vuelve a vincular el nombre al nuevo valor: name = name.upper().