2.4. Stringovi

String je niz Unicode znakova napisan unutar navodnika. Jednostruki i dvostruki navodnici su istovrijedni – odaberite stil koji vam omogućuje da izbjegnete escapanje navodnika koji se pojavljuju unutar teksta:

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

Stringovi u trostrukim navodnicima ("""...""" ili '''...''') protežu se kroz više redaka i doslovno čuvaju prelaske u novi redak:

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

Izlaz:

boot ok
firmware v1.28

2.4.1. Escape sekvence

Unutar običnog stringa \ uvodi poseban znak:

  • \n – novi redak

  • \t – tabulator

  • \\ – doslovna obrnuta kosa crta

  • \' / \" – doslovan navodnik (kada bi inače završio string)

  • \xHH – znak s heksadecimalnim kodom HH

  • \uHHHH – Unicode kodna točka HHHH

Kada string sadrži mnogo obrnutih kosih crta, prefiksirajte literal s r kako biste ga pretvorili u sirovi (raw) string. Obrnute kose crte tada se uzimaju doslovno – \n ostaje dug dva znaka umjesto da se zamijeni novim retkom:

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

2.4.2. Spajanje i ponavljanje

Dva stringa se spajaju pomoću +; string se ponavlja pomoću *:

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

Ponovljeni + u petlji alocira novi string u svakoj iteraciji. Za izgradnju većih stringova od mnogo dijelova koristite str.join().

2.4.3. Duljina, indeksiranje i rezanje

len() vraća broj znakova u stringu. Indeksiranje pomoću [] vraća string od jednog znaka na zadanoj poziciji; negativni indeksi broje se od kraja:

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

Isječak (slice) s[start:stop] vraća podstring od pozicije start sve do, ali ne uključujući, pozicije stop. Bilo koji kraj može se izostaviti da označi „početak” ili „kraj”, a opcionalna treća vrijednost s[start:stop:step] omogućuje preskakanje znakova.

String "OpenMV" s oznakama pozicija između svakog znaka, koji ilustrira kako isječak odabire znakove između dvije pozicije.

Pozicije isječka nalaze se između znakova. s[2:5] odabire znakove na pozicijama 2, 3 i 4.

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

Isječak izvan raspona tiho vraća onaj dio koji postoji – s[100:200] je prazan string "", a ne pogreška. Indeksiranje izvan raspona, s druge strane, podiže IndexError.

2.4.4. Nepromjenjivost

Stringovi se ne mogu mijenjati na mjestu. Operacije koje izgledaju kao da mijenjaju string zapravo vraćaju novi string i ostavljaju izvornik nepromijenjenim:

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

Da biste „promijenili” string, ponovno vežite ime na novu vrijednost: name = name.upper().