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