2.4. Strings¶
Een string is een reeks Unicode-tekens die tussen aanhalingstekens wordt geschreven. Enkele en dubbele aanhalingstekens zijn gelijkwaardig – kies de stijl waarmee je het escapen van de aanhalingstekens binnen de tekst kunt vermijden:
name = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\"" # both styles can be used
same = 'She said "hi"'
Strings met drievoudige aanhalingstekens ("""...""" of '''...''') lopen over meerdere regels en behouden de regeleinden letterlijk:
banner = """boot ok
firmware v1.28
"""
print(banner)
Uitvoer:
boot ok
firmware v1.28
2.4.1. Escapereeksen¶
Binnen een gewone string leidt \ een speciaal teken in:
\n– nieuwe regel\t– tab\\– een letterlijke backslash\'/\"– een letterlijk aanhalingsteken (wanneer het anders de string zou beëindigen)\xHH– het teken met hexcodeHH\uHHHH– het Unicode-codepuntHHHH
Wanneer een string veel backslashes bevat, plaats dan r vóór de literal om er een raw-string van te maken. Backslashes worden dan letterlijk genomen – \n blijft twee tekens lang in plaats van vervangen te worden door een nieuwe regel:
win_path = r"C:\Users\OpenMV\camera.py"
literal = r"\n is two characters, not a newline"
2.4.2. Aaneenschakeling en herhaling¶
Twee strings worden samengevoegd met +; een string wordt herhaald met *:
greeting = "Hello, " + name + "!"
line = "-" * 40 # 40-character separator
Herhaaldelijk + in een lus reserveert bij elke iteratie een nieuwe string. Gebruik str.join() om grotere strings uit veel onderdelen op te bouwen.
2.4.3. Lengte, indexering en slicen¶
len() geeft het aantal tekens in een string terug. Indexering met [] geeft een string van één teken op de opgegeven positie terug; negatieve indexen tellen vanaf het einde:
>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'
Een slice s[start:stop] geeft de substring terug vanaf positie start tot maar niet inclusief stop. Elk uiteinde kan worden weggelaten om “het begin” of “het einde” te betekenen, en een optionele derde waarde s[start:stop:step] laat je tekens overslaan.
Sliceposities bevinden zich tussen de tekens. s[2:5] selecteert de tekens op de posities 2, 3 en 4.¶
>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO' # whole string, reversed
Een slice buiten bereik geeft stilzwijgend terug welk gedeelte er ook maar bestaat – s[100:200] is de lege string "", geen fout. Indexering buiten bereik daarentegen veroorzaakt een IndexError.
2.4.4. Onveranderlijkheid¶
Strings kunnen niet ter plekke worden gewijzigd. Bewerkingen die eruitzien alsof ze een string muteren, geven in werkelijkheid een nieuwe string terug en laten het origineel ongemoeid:
>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV' # unchanged
Om een string te “wijzigen” bind je de naam opnieuw aan de nieuwe waarde: name = name.upper().