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 hexadecimalHH\uHHHH– el punto de código UnicodeHHHH
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.
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().