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.