2.4. Merkkijonot¶
Merkkijono on lainausmerkkien väliin kirjoitettu Unicode-merkkien jono. Yksinkertaiset ja kaksinkertaiset lainausmerkit ovat samanarvoisia – valitse tyyli, jolla vältät tekstin sisällä esiintyvien lainausmerkkien suojaamisen:
name = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\"" # both styles can be used
same = 'She said "hi"'
Kolminkertaisilla lainausmerkeillä merkityt merkkijonot ("""...""" tai '''...''') voivat ulottua useille riveille ja säilyttävät rivinvaihdot kirjaimellisesti:
banner = """boot ok
firmware v1.28
"""
print(banner)
Tuloste:
boot ok
firmware v1.28
2.4.1. Suojaussekvenssit¶
Tavallisen merkkijonon sisällä \ aloittaa erikoismerkin:
\n– rivinvaihto\t– sarkain\\– kirjaimellinen kenoviiva\'/\"– kirjaimellinen lainausmerkki (kun se muuten päättäisi merkkijonon)\xHH– merkki, jonka heksadesimaalikoodi onHH\uHHHH– Unicode-koodipisteHHHH
Kun merkkijono sisältää paljon kenoviivoja, lisää literaalin eteen r, jolloin siitä tulee raaka (raw) merkkijono. Tällöin kenoviivat otetaan kirjaimellisesti – \n pysyy kahden merkin mittaisena sen sijaan, että se korvattaisiin rivinvaihdolla:
win_path = r"C:\Users\OpenMV\camera.py"
literal = r"\n is two characters, not a newline"
2.4.2. Yhdistäminen ja toistaminen¶
Kaksi merkkijonoa liitetään yhteen operaattorilla +; merkkijono toistetaan operaattorilla *:
greeting = "Hello, " + name + "!"
line = "-" * 40 # 40-character separator
Toistuva + silmukassa varaa uuden merkkijonon jokaisella kierroksella. Kun rakennat suurempia merkkijonoja monista osista, käytä str.join().
2.4.3. Pituus, indeksointi ja viipalointi¶
len() palauttaa merkkijonon merkkien määrän. Indeksointi operaattorilla [] palauttaa yhden merkin mittaisen merkkijonon annetusta kohdasta; negatiiviset indeksit lasketaan lopusta:
>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'
Viipale s[start:stop] palauttaa osamerkkijonon kohdasta start aina kohtaan stop saakka, mutta ei sitä sisältäen. Kumpi tahansa pää voidaan jättää pois tarkoittamaan ”alkua” tai ”loppua”, ja valinnainen kolmas arvo s[start:stop:step] mahdollistaa merkkien ohittamisen.
Viipaleiden kohdat sijaitsevat merkkien välissä. s[2:5] valitsee merkit kohdista 2, 3 ja 4.¶
>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO' # whole string, reversed
Alueen ulkopuolelle ulottuva viipale palauttaa hiljaisesti sen osan, joka on olemassa – s[100:200] on tyhjä merkkijono "", ei virhe. Sen sijaan alueen ulkopuolelle indeksointi nostaa poikkeuksen IndexError.
2.4.4. Muuttumattomuus¶
Merkkijonoja ei voi muokata paikoillaan. Operaatiot, jotka näyttävät muuttavan merkkijonoa, palauttavat itse asiassa uuden merkkijonon ja jättävät alkuperäisen koskemattomaksi:
>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV' # unchanged
”Muuta” merkkijono sitomalla nimi uuteen arvoon: name = name.upper().