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