Ohjelmoinnin peruskurssi Y2, kurssimateriaali

4.2. Merkkijonojen muodostaminen metodilla str.format

«  4.1. Tiedostojen kirjoittaminen ja lukeminen   ::   Etusivulle   ::   Python-materiaali  »

4.2. Merkkijonojen muodostaminen metodilla str.format

Pythonissa on tarjolla sangen monipuolinen merkkijonojen muotoilumetodi str.format. Tarjolla olevia muotoilumäärityksiä kuvataan tarkemmin The Python Standard Libraryn luvussa 6.1.3. Format String Syntax, johon kannattaa tutustua. Käydään tässä läpi muutamia keskeisiä rakenteita.

Annetut parametrit voi suoraviivaisesti lisätä oikeisiin kohtiin merkkijonossa käyttäen merkintää {}.

>>> s='Arvot ovat {}, {} ja {}'.format('a', 1, True)
>>> s
'Arvot ovat a, 1 ja True'
>>>
Merkintä {} poimii järjestyksessä seuraavan format -metodille annetun parametrin.

Tämä ei kuitenkaan ole näppärää, jos haluamme toistaa saman parametrin moneen kertaan. Lisäämällä numeron aaltosulkujen väliin, voimme käyttää samoja parametreja useita kertoja ja mielivaltaisessa järjestyksessä. Esim.

>>> def info_box(mother, father, hline, nl):
...     print('{2}{3}Mother: {0}{3}{2}{3}Father: {1}{3}{2}'.format(mother, father, hline, nl))
...
>>>
>>> info_box('Virpi Varpunen', 'Keijo Kotka', 22 * '-', '\n')
----------------------
Mother: Virpi Varpunen
----------------------
Father: Keijo Kotka
----------------------
>>> info_box('Teea Tilhi', 'Pertti Pääskynen', '', '\n')

Mother: Teea Tilhi

Father: Pertti Pääskynen

>>>
Merkintä {2} poimii formatin toisen parametrin (numerointi alkaa nollasta), eli funktion info_box parametrin hline. Käytämme tätä parametria kolme kertaa.
Funktion info_box parametria nl käytämme rivierotimena. Annamme tämän formatille kolmantena parametrina ja käytämme sitä formatin merkkijonossa peräti neljä kertaa.

Numeroitujen parametrien käyttö on kuitenkin hieman hankalaa, koska koko ajan pitää laskeskella, missä indeksissä mikäkin parametri oli. Helpompaa voi olla käyttää nimettyjä parametreja:

>>> print('People claim that {firstname} {lastname} answers to all email sent to {email}'
... .format(firstname='Noam', lastname='Chomsky', email='chomsky@mit.edu'))
People claim that Noam Chomsky answers to all email sent to chomsky@mit.edu
>>>
>>> # Tai käyttäen dict-oliota
>>> chomsky={'firstname': 'Noam', 'lastname': 'Chomsky', 'email': 'chomsky@mit.edu'}
>>> print('People claim that {firstname} {lastname} answers to all email sent to {email}'.format(**chomsky))
People claim that Noam Chomsky answers to all email sent to chomsky@mit.edu
>>>
Nimetty parametri 'firstname'.
Nimetyt parametrit otetaan sanakirjan chomsky vastaavista kentistä, koska ** -notaatio laventaa sanakirjan kentät funktionkutsussa nimetyiksi parametreiksi.

«  4.1. Tiedostojen kirjoittaminen ja lukeminen   ::   Etusivulle   ::   Python-materiaali  »