InterSystems B.V.
Funkce
Při programování se často setkáte se situací, kdy
                  se určité části programu dají znova využít na různých
                  místech, a abyste je nemuseli neustále opakovat,
                  vznikla koncepce podprogramu. Podprogram, který vrací
                  při svém ukončení nějaké hodnoty, se nazývá funkce.
Uživatelsky definované funkce
Nejjednodušší forma definice funkce má následující
                  tvar:
def jménoFunkce([arg1, arg2, …]):
blok
Klíčové slovo def je následováno
                  názvem funkce a nepovinným seznamem argumentů,
                  uzavřeným do kulatých závorek. Závorky jsou součástí
                  definice funkce i v případě, že funkce nemá žádné
                  argumenty. Za závorkami následuje dvojtečka.
Definice funkce neobsahuje specifikaci datového
                  typu hodnoty, kterou bude vracet. Funkce v Jythonu
                  nejenže nedefinují datový typ návratové hodnoty, ale
                  ani nespecifikují, zda vůbec nějakou hodnotu budou
                  vracet. Ve skutečnosti každá funkce
                  v Jythonu  vrací nějakou hodnotu. Pokud tato hodnota není
                  explicitně určena, funkce vrací None
.
Pokud definice funkce obsahuje argumenty, pak tyto
                  argumenty jsou taktéž uváděny bez datových typů.
Zde je ukázka velmi jednoduché funkce, která
                  vlastně vůbec nic nedělá:
>>> def prázdnáFunkce():
... pass
Definice funkce je při jejím volání zpracována
                  následujícím způsobem. Jistě si pamatujete, že
                  v Jythonu je vše objektem. Tudíž i funkce je objekt,
                  který je vytvořen interpretem jazyka během vykonávání
                  programu a odkaz na tento objekt je uložen
                  v proměnné. Tato proměnná má stejné jméno, jako je
                  název funkce. Funkci následně zavoláme tím způsobem,
                  že aplikujeme operátor volání funkce () na tuto proměnnou.  Ano, vidíte dobře.
                  Kulaté závorky () jsou operátor, jenž
                  je aplikován na proměnnou, která obsahuje odkaz na
                  objekt, reprezentující funkci. Je to patrné z níže
                  uvedeného příkladu:
>>> def jednoduchaFunkce(retezec):
... print 'Byl zadan retezec: ', retezec
...
>>>
>>> # vytisknu obsah promenne jednoduchaFunkce
>>> print jednoduchaFunkce
<function jednoduchaFunkce at 11403048>
>>>
>>> #zavolam funkci a zadam vstupni parametr
>>> jednoduchaFunkce('Jsem vam to rikal, ze?:)')
Byl zadan retezec: Jsem vam to rikal, ze?:)
Veškeré důsledky výše uvedeného tvrzení budou
                  probrány později, až se dozvíme více o modulech a
                  jmenných prostorech.
Návratovou hodnotu funkce definujeme pomocí příkazu
                  return. Příkaz return
                  se může v definici funkce vyskytovat libovolněkrát.
                  Kdykoliv se během vykonávání kódu narazí na tento
                  příkaz, ukončí se vykonávání volané funkce a vrátí se
                  hodnota výrazu uvedeného za tímto příkazem. Jelikož
                  datový typ vrácené hodnoty je určován až v době
                  vykonávání funkce, je možné, že funkce může vracet
                  hodnotu, jejíž datový typ je závislý na vstupních
                  parametrech:
>>> def novaFunkce(jakyTyp):
... if jakyTyp == 's':
... return 'Vracim retezec'
... elif jakyTyp == 'i':
... return 123456
... else:
... return None
...
>>> novaFunkce('nic')
>>>
>>> novaFunkce('i')
123456
>>>
>>> novaFunkce('s')
'Vracim retezec'
>>>
Dokumentační řetězec
Je dobrým zvykem, že zdrojový kód obsahuje
                  komentáře, které dokumentují obraty a postupy použité
                  ve vašich programech. Tyto komentáře jsou viditelné,
                  máte-li tyto zdroje k dispozici. Bylo by jistě
                  příjemné mít k dispozici nástroj, který by byl
                  schopen v případě, že nevíte, k jakému účelu je vámi
                  volaná funkce navrhnutá, resp. jaké má argumenty a
                  jaký je jejich význam, tyto informace zobrazit.
V Jythonu takový nástroj existuje a jmenuje dokumentační řetězec. Obsahuje-li funkce dokumentační řetězec, musí být tento řetězec
                  první věcí, která je v těle funkce definována, tj.
                  musí následovat hned na řádku za řádkem obsahující
                  příkaz def. Řetězec je ohraničen
                  z obou stran třemi uvozovkami, které dávají
                  interpretu Jythonu na vědomí, že vše, co je mezi
                  těmito uvozovkami, je víceřádkový komentář, a má speciální význam.
Může to vypadat následovně:
def novaFunkce(jakyTyp):
"""Funkce vraci hodnoty ruzneho datoveho typu.
Vstupni parametry:
's' ... vrati retezec
'i' ... vrati cislo
cokoliv jineho vrati 'None'"""
if jakyTyp == 's':
return 'Vracim retezec'
elif jakyTyp == 'i':
return 123456
else:
return None
Uložíme-li výše uvedenou definici funkce do
                  souboru, například dokumkom.py, můžeme
                  výhod dokumentačního řetězce využít takto:
D:\Jython\Source codes>jython -i dokumkom.py
>>>
>>> print novaFunkce.__doc__
Funkce vraci hodnoty ruzneho datoveho typu.
Vstupni parametry:
's' ... vrati retezec
'i' ... vrati cislo
cokoliv jineho vrati 'None'
>>>
>>> novaFunkce('i')
123456
>>>
Kdykoliv potřebujeme zobrazit obsah dokumentačního
                  řetězce nějakého objektu, použijeme obrat:
identifikátorObjektu.__doc__
kde __doc__ ,je atribut objektu,
                  obsahující dokumentační řetězec. Objektem, na který
                  ukazuje proměnná identifikátorObjektu,
                  může být funkce, modul nebo i třída.
Obdobně, jako psaní názvů proměnných, i psaní
                  dokumentačních řetězců, se řídí určitými pravidly.
                  První řádek by měl být pokud možno krátký, obsahující
                  souhrnný popis účelu objektu. Kvůli stručnosti by
                  neměl obsahovat ani název objektu, ani typ objektu.
                  Toto je možné obdržet i jinými metodami. Tato řádka
                  by měla začínat velkým písmenem a končit tečkou.
