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