Funktsioonid
Eelmine
Järgmine

Peatükk 5. Funktsioonid

Funktsiooni defineerimine

Programmeerimise juures tuleb sageli ette, et mingit koodi on vaja korrata. Kuigi redaktoris programmi teksti kirjutades pole eriti keeruline "kopipeisti" teha, pole see siiski kuigi mõistlik. Seda koodi peab saama keegi ka lugeda, kui mitte muu, siis vähemalt koodikirjutaja ise. Ja kui homme võib tänane idee ja lähenemine meeles olla, siis järgmisel nädalal võib see olla juba ununenud, rääkimata järgmisest kuust.

Üks võimalus koodi korrata on defineerida funktsioon.

Operaatori def abil defineeritakse funktsioon. See peab sisaldama funktsiooni nime ja parameetreid. Funktsioon võib sisaldada dokumentantsioonistringi. Kuigi dokumentatsioonistring ei ole kohustuslik, on soovitav seda siiski kasutada, sest see hõlbustab ka automaatset dokumenteerimist. Näiteks on võimalik interaktiivse sessiooni puhul moodulis leiduvate funktsioonide kohta abi küsida võtmesõnaga help.

>>> def korruta(x,y): 
...     "Korrutab argumendid x ja y"
...     return x*y
... 
>>>print korruta(2,3) 
6 
>>> help(korruta)
Help on function korruta in module __main__:

korruta(x, y)
    Korrutab argumendid x ja y

Võtmesõna return tagastab (väljastab) funktsiooni väärtuse. Seda väärtust on võimalik kasutada mujal, näiteks teise funktsiooni või operaatori argumendina:

>>>print korruta(4,korruta(2,3)) 
24 
>>> 

Funktsiooni on võimalik kirjutada ka nii, et ta ei väljasta midagi ja trükib tulemuse välja. Siis näeb küll tulemust kohe, kuid seda ei saa kasutada järmises tehtes.

>>>def korruta_prindi(x,y):
...    print x*y
...
...
>>>korruta_prindi(2,4)
8
>>>korruta(2,korruta_prindi(2,4))
8
Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    File "<stdin>", line 2, in korruta
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

Seades printimisega korrutamise väliseks funktsiooniks, saame mõistliku tulemuse (aga ainult väljatrükina).

>>>korruta_prindi(2,korruta(2,3))
12

Muidugi ei ole mõistlik defineerida funktsioonina tehet, mis on niigi lihtne ja mis funktsioonina välja kirjutatuna võtab rohkem aega ja vaeva kui lihtsa tehtena. Seepärast teeme midagi praktilisemat: kirjutame funktsioonid, mis teisendaks tollid sentimeetriteks ja vastupidi.

Tollide ja sentimeetrite kohta on meil teada, et üks toll on 2,54 cm. Selleks, et saada mõõt tollides mõõduks sentimeetrites, tuleb korrutada etteantud mõõt (see on siis meie funktsioonis muutuja) 2,54-ga. Defineerime funktsiooni

>>>def toll_cmiks(x):
...    "Teisendab mõõdu tollides mõõduks sentimeetrites."
...    return x*2.54
...
>>>toll_cmiks(19)
48.26
>>>print toll_cmiks.__doc__
Teisendab mõõdu tollides mõõduks sentimeetrites.

Pythonis on võimalus lisada funktsioonile dokumentatsioon. Lisaks selgemini loetavale ja kergemini jälgitavale koodile võimaldab see ka interaktiivses sessioonis kasutatava funktsiooni kohta abi küsida.

Kui väikesel ja kergesti mõistetaval funktsioonil ei ole dokumendi osa kriitiline, siis suurema funktsiooni puhul oleks soovitav kirjeldada, mida ta teeb, milliseid argumente võtab ja mida väljastab.

Pythonis lisatakse dokumentatsioonistring kohe pärast def käsku.

Eelmine
Järgmine
Esileht