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.

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

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