Nauč se Python > Kurzy > Začátečnický kurz PyLadies > Cykly a řetězce > Funkce

Prozatím jsme si při programování vystačili hlavně s operátory. Sčítali jsme čísla pomocí +, porovnávali jsme pomocí if.

V Pythonu je operátorů poměrně málo. Už z nich známe skoro půlku! Tady jsou všechny Pythonní operátory:

== != < > <= >= | ^ & << >> + - * @ / // % ~ ** [ ] ( ) { } .
lambda if else or and not in not in is is not

Asi jste si ale neuvědomili, že jsme pracovali i s funkcemi - třeba s print nebo input.

Co je to tedy funkce? Jedná se o kus kódu, který je nějako pojmenovaný, třeba právě print. Tento kód provádí to, co popisuje jeho název - print tiskne text. Funkce mívají vstupy, což jsou hodnoty, se kterými se v kódu dále pracuje - print má jako vstup mj. text, který se má vytisknout. Funkce také mívají výstup. Díky tomu můžeme výsledek funkce použít v dalších částech programu.

V Pythonu se funkce sdružují do modulů. No modulech není nic složitého - jsou to jen soubory s příponou .py. Jméno modulu je stejné, jako jméno souboru.

Příkladem funkce z matematiky je sinus:

  • x = sin a

Python má tuto funkci zabudovanou, jenom přidáme závorky, aby bylo jasnější, k čemu se operace vztahuje:

x = sin(a)

Funkce sin se musí naimportovat z modulu math.

from math import sin

x = sin(1)  # (v radiánech)
print(x)

Jak je vidět, funkce sinus je tak trochu schovaná. Přece jen, print nebo if potřebují všichni, ale ne všichni mají rádi matematiku…

Import a pojmenování souborů

Při importování je potřeba si dávat pozor na pojmenování souborů: importuješ-li from math, nesmí se tvůj program jmenovat math.py.

Proč? Když Python v adresáři, ze kterého program pouštíš, najde soubor math.py, bude se snažit importovat sin z něho místo z předpřipravené sady matematických funkcí.

Volání funkcí

Funkci voláme jménem.

Je to jméno jako u proměnných – vlastně to je proměnná, jen je v ní, místo čísla nebo řetězce, funkce.

Za jméno funkce patří závorky, do nichž uzavřeme argument (neboli vstup) funkce. To je informace, se kterou bude naše funkce pracovat – třeba sin() ze svého argumentu vypočítá sinus.

Volání funkce je výraz a výsledná, neboli návratová, hodnota (angl. return value) se dá třeba přiřadit do proměnné.

        jméno funkce
                 │
                ╭┴╮
            x = sin(1)
            ▲      ╰┬╯
            │     argument
            │
            ╰── návratová hodnota

Nebo se dá použít místo čísla v součtu:

a = sin(1) + cos(2)

Nebo v podmínce ifu:

if sin(1) < 3:

Nebo dokonce jako argument jiné funkce:

print(sin(1))

… a podobně.

Argumenty

Některým funkcím můžeme předat i více argumentů. Třeba funkci print, která všechny své argumenty vypíše na řádek. Jednotlivé argumenty oddělujeme čárkami:

print(1, 2, 3)
print("Jedna plus dva je", 1 + 2)

Některé funkce nepotřebují žádný argument. Příkladem je zase print. Je ale nutné napsat závorky – i když jsou prázdné. Hádej, co tohle volání udělá?

print()

Řešení

Funkce je potřeba volat

Pozor na to, že když nenapíšeš závorky, funkce se nezavolá! (Nedostaneš návratovou hodnotu, ale samotnou funkci.) Zkus si, co dělají tyhle příklady, abys pak podobné chyby poznala:

from math import sin
print(sin(1))
print(sin)
print(sin + 1)

Pojmenované argumenty

Některé funkce umí pracovat i s pojmenovanými argumenty. Píšou se podobně jako přiřazení do proměnné, s rovnítkem, ale uvnitř závorek.

Třeba funkce print normálně ukončí výpis novým řádkem, ale pomocí argumentu end se dá vypsat i něco jiného.

Tenhle příklad je potřeba napsat do souboru; v interaktivní konzoli nebude výstup vypadat, jak má.

print('1 + 2', end=' ')
print('=', end=' ')
print(1 + 2, end='!')
print()

Užitečné funkce

Nakonec si ukážeme pár základních funkcí, které nám Python nabízí. Můžeš si stáhnout i přehled, který se rozdává na srazech.

Vstup a výstup

Tyhle funkce už známe. print vypíše nepojmenované argumenty, oddělené mezerou. Pojmenovaný argument end určuje, co se vypíše na konci (místo přechodu na nový řádek); sep zase, co se vypíše mezi jednotlivými argumenty (místo mezery).

Příklad opět doporučuji spustit ze souboru, ne interaktivně:

print(1, "dvě", False)
print(1, end=" ")
print(2, 3, 4, sep=", ")

Základní funkce na načtení vstupu, input, vypíše otázku, počká na text od uživatele a ten vrátí jako řetězec.

input('zadej vstup: ')

Převádění typů

Co ale když nechceme pracovat s řetězcem, ale třeba s číslem? Tady nám pomůže skupina funkcí, které umí převádět čísla na řetězce a zpátky. Každý ze tří typů (angl. types) proměnných, které zatím známe, má funkci, která vezme nějakou hodnotu a vrátí podobnou hodnotu „svého“ typu. Na celá čísla je funkce int (z angl. integer), na reálná čísla je float (z angl. floating-point), a pro řetězce str (z angl. string).

int(x)              # převod na celé číslo
float(x)            # převod na reálné číslo
str(x)              # převod na řetězec

Příklady:

3 == int('3') == int(3.0) == int(3.141) == int(3)
8.12 == float('8.12') == float(8.12)
8.0 == float(8) == float('8') == float(8.0)
'3' == str(3) == str('3')
'3.141' == str(3.141) == str('3.141')

Ne všechny převody jsou možné:

int('blablabla')    # chyba!
float('blablabla')  # chyba!
int('8.9')          # chyba!

…a jak si poradit s chybou, která nastane, když použiješ špatnou hodnotu, si řekneme později. Teď je hlavní to, že už víš, jak funguje int(input('zadej číslo: ')) z minula!

Matematické funkce

Matematika je občas potřeba, takže se pojďme podívat, jak v Pythonu pracovat s čísly.

Jedna zajímavá matematická funkce je k dispozici vždy:

round(cislo)    # zaokrouhlení

Spousta dalších se dá importovat z modulu math:

from math import sin, cos, tan, sqrt, floor, ceil

sin(uhel)       # sinus
cos(uhel)       # kosinus
tan(uhel)       # tangens
sqrt(cislo)     # druhá odmocnina

floor(cislo)    # zaokrouhlení dolů
ceil(cislo)     # zaokrouhlení nahoru

Náhoda

Nakonec si ukážeme dvě funkce z modulu random, které jsou velice užitečné pro hry.

from random import randrange, uniform

randrange(a, b)   # náhodné celé číslo od a do b-1
uniform(a, b)     # náhodné reálné číslo od a do b

Pozor na to, že randrange(a, b) nikdy nevrátí samotné b. Pokud potřebujeme náhodně vybrat ze tří možností, použij randrange(0, 3), což vrátí 0, 1, nebo 2:

from random import randrange

cislo = randrange(0, 3)  # číslo je od 0, 1, nebo 2
if cislo == 0:
    print('Kolečko')
elif cislo == 1:
    print('Čtvereček')
else:  # 2
    print('Trojúhelníček')

Pamatuj, když importuješ z modulu random, nesmí se tvůj soubor jmenovat random.py.

A další

Python dává k dispozici obrovské množství dalších funkcí a modulů, i když ne všem budeš ze začátku rozumět. Všechny jsou – anglicky – popsány v dokumentaci Pythonu, např. vestavěné funkce, matematika.


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem. Přejít na stejnou lekci v kurzu pro samouky.