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

  • \uHHHH – Unicode-koodipiste HHHH

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.

The string "OpenMV" with position markers between each character, illustrating how a slice selects the characters between two positions.

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