Merkkijonojen Muuttumattomuus
Pythonissa merkkijonot ovat muuttumattomia: kun merkkijono on luotu, sen sisältämiä merkkejä ei voi muuttaa paikan päällä. Kaikki "muokkaukset" luovat itse asiassa uuden merkkijonon. Tämä on tärkeää sekä oikeellisuuden (ei vahingossa tapahtuvia paikan päällä tehtyjä muutoksia) että suorituskyvyn (kuinka rakennat suurempia merkkijonoja) kannalta.
Ei paikan päällä tehtäviä muutoksia
Merkkejä voi lukea indeksin avulla, mutta niihin ei voi tehdä sijoituksia.
123456s = "hello" t = "H" + s[1:] # Creates a new string: "Hello" print(t) s[0] = "H" # TypeError: strings don't support item assignment
Useimmat merkkijonometodit palauttavat uuden merkkijonon ja jättävät alkuperäisen muuttumattomaksi.
12345678# Cleaning up user input from a registration form user_name = " Alice " user_name.strip() # returns "Alice", but the variable still has spaces print(user_name) # " Alice " user_name = user_name.strip() # assign the cleaned value back print(user_name) # "Alice" → cleaned and ready to store
Ketjutus on sallittua, mutta muista, että saat uuden olion jokaisessa vaiheessa.
123456# Normalizing a user's chat message before saving it user_message = " hello\n" clean_message = user_message.strip().upper() print(user_message) # original remains " hello\n" print(clean_message) # "HELLO" → cleaned and ready for processing
"Muokkaaminen" luomalla uusi merkkijono
Käytä viipalointia, replace-metodia tai yhdistämistä (konkatenointia) uuden arvon tuottamiseen.
1234567s = "data" s = s.replace("t", "T") # "daTa" print(s) s = s[:1] + "A" + s[2:] # "dAta" print(s)
Tehokas rakentaminen
Toistuva + suurissa silmukoissa voi olla hidasta (paljon väliaikaisia merkkijonoja). Yleinen tapa on kerätä osat ja yhdistää ne kerralla:
1234# Combining message parts received from a device response_parts = ["Status:", " ", "200", "\n", "Success"] response_message = "".join(response_parts) # "Status: 200\nSuccess" print(response_message)
Opit lisää yhdistämis- ja muotoilutavoista seuraavassa luvussa.
1. Mikä rivi yrittää muokata merkkijonoa paikallaan ja aiheuttaa virheen?
2. Mitä koodi tulostaa?
3. Pitkän merkkijonon kokoaminen monista pienistä osista. Mikä on suositeltavaa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain why string immutability is important in Python?
What are some common mistakes people make when working with immutable strings?
Can you show more examples of efficient string building?
Mahtavaa!
Completion arvosana parantunut arvoon 5.26
Merkkijonojen Muuttumattomuus
Pyyhkäise näyttääksesi valikon
Pythonissa merkkijonot ovat muuttumattomia: kun merkkijono on luotu, sen sisältämiä merkkejä ei voi muuttaa paikan päällä. Kaikki "muokkaukset" luovat itse asiassa uuden merkkijonon. Tämä on tärkeää sekä oikeellisuuden (ei vahingossa tapahtuvia paikan päällä tehtyjä muutoksia) että suorituskyvyn (kuinka rakennat suurempia merkkijonoja) kannalta.
Ei paikan päällä tehtäviä muutoksia
Merkkejä voi lukea indeksin avulla, mutta niihin ei voi tehdä sijoituksia.
123456s = "hello" t = "H" + s[1:] # Creates a new string: "Hello" print(t) s[0] = "H" # TypeError: strings don't support item assignment
Useimmat merkkijonometodit palauttavat uuden merkkijonon ja jättävät alkuperäisen muuttumattomaksi.
12345678# Cleaning up user input from a registration form user_name = " Alice " user_name.strip() # returns "Alice", but the variable still has spaces print(user_name) # " Alice " user_name = user_name.strip() # assign the cleaned value back print(user_name) # "Alice" → cleaned and ready to store
Ketjutus on sallittua, mutta muista, että saat uuden olion jokaisessa vaiheessa.
123456# Normalizing a user's chat message before saving it user_message = " hello\n" clean_message = user_message.strip().upper() print(user_message) # original remains " hello\n" print(clean_message) # "HELLO" → cleaned and ready for processing
"Muokkaaminen" luomalla uusi merkkijono
Käytä viipalointia, replace-metodia tai yhdistämistä (konkatenointia) uuden arvon tuottamiseen.
1234567s = "data" s = s.replace("t", "T") # "daTa" print(s) s = s[:1] + "A" + s[2:] # "dAta" print(s)
Tehokas rakentaminen
Toistuva + suurissa silmukoissa voi olla hidasta (paljon väliaikaisia merkkijonoja). Yleinen tapa on kerätä osat ja yhdistää ne kerralla:
1234# Combining message parts received from a device response_parts = ["Status:", " ", "200", "\n", "Success"] response_message = "".join(response_parts) # "Status: 200\nSuccess" print(response_message)
Opit lisää yhdistämis- ja muotoilutavoista seuraavassa luvussa.
1. Mikä rivi yrittää muokata merkkijonoa paikallaan ja aiheuttaa virheen?
2. Mitä koodi tulostaa?
3. Pitkän merkkijonon kokoaminen monista pienistä osista. Mikä on suositeltavaa?
Kiitos palautteestasi!