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 esadecimale HH

  • \uHHHH – il codepoint Unicode HHHH

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.

La stringa "OpenMV" con marcatori di posizione tra ogni carattere, che illustrano come una slice seleziona i caratteri tra due posizioni.

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