2.4. Șiruri de caractere

Un șir de caractere este o secvență de caractere Unicode scrisă între ghilimele. Ghilimelele simple și cele duble sunt echivalente – alegeți stilul care vă permite să evitați evadarea ghilimelelor care apar în interiorul textului:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Șirurile cu ghilimele triple ("""...""" sau '''...''') se întind pe mai multe rânduri și păstrează literal caracterele de linie nouă:

banner = """boot ok
firmware v1.28
"""
print(banner)

Rezultat:

boot ok
firmware v1.28

2.4.1. Secvențe de evadare

În interiorul unui șir obișnuit, \ introduce un caracter special:

  • \n – linie nouă

  • \t – tab

  • \\ – o bară oblică inversă literală

  • \' / \" – o ghilimea literală (atunci când altfel ar încheia șirul)

  • \xHH – caracterul cu codul hexazecimal HH

  • \uHHHH – punctul de cod Unicode HHHH

Atunci când un șir conține multe bare oblice inverse, prefixați literalul cu r pentru a-l transforma într-un șir brut (raw). Barele oblice inverse sunt apoi luate literal – \n rămâne lung de două caractere în loc să fie înlocuit cu o linie nouă:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Concatenare și repetare

Două șiruri se unesc cu +; un șir se repetă cu *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

Repetarea lui + într-o buclă alocă un șir nou la fiecare iterație. Pentru a construi șiruri mai mari din multe fragmente, folosiți str.join().

2.4.3. Lungime, indexare și feliere

len() returnează numărul de caractere dintr-un șir. Indexarea cu [] returnează un șir de un singur caracter la poziția dată; indicii negativi numără de la sfârșit:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

O felie s[start:stop] returnează subșirul de la poziția start până la, dar fără a include, stop. Oricare dintre capete poate fi omis pentru a însemna „începutul” sau „sfârșitul”, iar o a treia valoare opțională s[start:stop:step] vă permite să săriți peste caractere.

Șirul „OpenMV” cu marcaje de poziție între fiecare caracter, ilustrând modul în care o felie selectează caracterele dintre două poziții.

Pozițiile feliilor se află între caractere. s[2:5] selectează caracterele aflate la pozițiile 2, 3 și 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

O felie aflată în afara intervalului returnează în tăcere oricare porțiune există – s[100:200] este șirul gol "", nu o eroare. Indexarea în afara intervalului, pe de altă parte, ridică IndexError.

2.4.4. Imutabilitate

Șirurile nu pot fi modificate pe loc. Operațiile care par a modifica un șir returnează de fapt un șir nou și lasă originalul neatins:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Pentru a „schimba” un șir, reasociați numele la noua valoare: name = name.upper().