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