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.

The string "OpenMV" with position markers between each character, illustrating how a slice selects the characters between two positions.

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().