2.4. Stringhe#
Una stringa è una sequenza di caratteri Unicode scritta tra virgolette. Le virgolette singole e doppie sono equivalenti: scegli lo stile che ti consente di evitare l’escape delle virgolette presenti all’interno del testo:
name = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\"" # both styles can be used
same = 'She said "hi"'
Le stringhe con triple virgolette ("""...""" oppure '''...''') si estendono su più righe e conservano letteralmente i caratteri di a capo:
banner = """boot ok
firmware v1.28
"""
print(banner)
Output:
boot ok
firmware v1.28
2.4.1. Sequenze di escape#
All’interno di una stringa normale, \ introduce un carattere speciale:
\n– a capo (newline)\t– tabulazione\\– una barra rovesciata letterale\'/\"– una virgoletta letterale (quando altrimenti terminerebbe la stringa)\xHH– il carattere con codice esadecimaleHH\uHHHH– il codepoint UnicodeHHHH
Quando una stringa contiene molte barre rovesciate, anteponi al letterale il prefisso r per renderla una stringa raw (grezza). Le barre rovesciate vengono quindi prese alla lettera: \n rimane lungo due caratteri invece di essere sostituito da un a capo:
win_path = r"C:\Users\OpenMV\camera.py"
literal = r"\n is two characters, not a newline"
2.4.2. Concatenazione e ripetizione#
Due stringhe vengono unite con +; una stringa viene ripetuta con *:
greeting = "Hello, " + name + "!"
line = "-" * 40 # 40-character separator
L’uso ripetuto di + in un ciclo alloca una nuova stringa a ogni iterazione. Per costruire stringhe più grandi a partire da molti pezzi, usa str.join().
2.4.3. Lunghezza, indicizzazione e slicing#
len() restituisce il numero di caratteri in una stringa. L’indicizzazione con [] restituisce una stringa di un carattere nella posizione indicata; gli indici negativi contano dalla fine:
>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'
Una slice s[start:stop] restituisce la sottostringa dalla posizione start fino a, ma esclusa, stop. Uno dei due estremi può essere omesso per indicare «l’inizio» o «la fine», e un terzo valore opzionale s[start:stop:step] ti permette di saltare dei caratteri.
Le posizioni delle slice si trovano tra i caratteri. s[2:5] seleziona i caratteri nelle posizioni 2, 3 e 4.#
>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO' # whole string, reversed
Una slice fuori intervallo restituisce silenziosamente la porzione che esiste: s[100:200] è la stringa vuota "", non un errore. L’indicizzazione fuori intervallo, invece, solleva IndexError.
2.4.4. Immutabilità#
Le stringhe non possono essere modificate sul posto. Le operazioni che sembrano mutare una stringa in realtà restituiscono una nuova stringa e lasciano intatta l’originale:
>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV' # unchanged
Per «modificare» una stringa, riassegna il nome al nuovo valore: name = name.upper().