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.

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

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