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 hexcode HH

  • \uHHHH – het Unicode-codepunt HHHH

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.

De string "OpenMV" met positiemarkeringen tussen elk teken, ter illustratie van hoe een slice de tekens tussen twee posities selecteert.

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