2.4. Strängar

En sträng är en sekvens av Unicode-tecken skrivna mellan citationstecken. Enkla och dubbla citationstecken är likvärdiga – välj den stil som låter dig undvika att escapa de citationstecken som förekommer inuti texten:

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

Strängar med trippelcitat ("""...""" eller '''...''') sträcker sig över flera rader och bevarar radbrytningarna ordagrant:

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

Utdata:

boot ok
firmware v1.28

2.4.1. Escape-sekvenser

Inuti en vanlig sträng inleder \ ett specialtecken:

  • \n – ny rad

  • \t – tabb

  • \\ – ett ordagrant omvänt snedstreck

  • \' / \" – ett ordagrant citationstecken (när det annars skulle avsluta strängen)

  • \xHH – tecknet med hexkoden HH

  • \uHHHH – Unicode-kodpunkten HHHH

När en sträng innehåller många omvända snedstreck kan du prefixa literalen med r för att göra den till en sträng. Omvända snedstreck tolkas då ordagrant – \n förblir två tecken långt i stället för att ersättas med en ny rad:

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

2.4.2. Sammanfogning och upprepning

Två strängar fogas samman med +; en sträng upprepas med *:

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

Upprepad + i en loop allokerar en ny sträng vid varje iteration. För att bygga större strängar av många delar, använd str.join().

2.4.3. Längd, indexering och slicing

len() returnerar antalet tecken i en sträng. Indexering med [] returnerar en sträng på ett tecken vid den angivna positionen; negativa index räknas från slutet:

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

En slice s[start:stop] returnerar delsträngen från position start upp till men inte inklusive stop. Endera änden kan utelämnas för att betyda ”början” eller ”slutet”, och ett valfritt tredje värde s[start:stop:step] låter dig hoppa över tecken.

Strängen "OpenMV" med positionsmarkörer mellan varje tecken, som illustrerar hur en slice väljer tecknen mellan två positioner.

Slice-positioner ligger mellan tecken. s[2:5] väljer tecknen på positionerna 2, 3 och 4.

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

En slice utanför intervallet returnerar tyst den del som finns – s[100:200] är den tomma strängen "", inte ett fel. Indexering utanför intervallet ger däremot upphov till IndexError.

2.4.4. Oföränderlighet

Strängar kan inte ändras på plats. Operationer som ser ut att förändra en sträng returnerar i själva verket en ny sträng och lämnar originalet orört:

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

För att ”ändra” en sträng, bind om namnet till det nya värdet: name = name.upper().