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 hexkodenHH\uHHHH– Unicode-kodpunktenHHHH
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 rå 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.
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().