Python/Kenjiro995/Funkce
Základní
editovatPython je multiparadigmatický jazyk. Což znamená, že je možné v něm programovat podle různých paradigmat (druhy programování: strukturované programování, procedurální programování, objektové programování atd.). Vytvoření vlastní funkce umožňuje zjednodušit a zpřehlednit napsaný kód, protože některé části programu se mohou často opakovat, avšak efektivnější je, napsat je pouze jednou a poté zavolat na místech, kde jich je zapotřebí.
Funkce se definuje příkazem def a v závorce jsou uvedené parametry, které jsou při volání funkce této funkci předávány jako vstupy. Příkaz je ukončen dvojtečkou. Kód funkce je odsazen tabulátorem.
def NázevFunkce(parametry):
blok příkazů
Funkce bez parametrů (procedura)
editovatKterá nevrací hodnotu
editovat# definování funkce
def NapisAhoj():
print("ahoj")
# použití funkce (její volání), vyvolá akci (provede se funkce)
NapisAhoj() # nápíše "ahoj"
Výstup:
ahoj
# definice funkce
def Vypis5krat():
for i in range(5):
print("Python")
# volání funkce
Vypis5krat()
Výstup:
Python Python Python Python Python
Která vrací hodnotu
editovat# definování funkce
def Vypis106():
return 106
# volání funkce
print(Vypis106())
Výstup:
106
# definování funkce
def VypisAhoj():
return "Ahoj"
# volání funkce
print(VypisAhoj())
Výstup:
Ahoj
Funkce s parametrem
editovatKterá nevrací hodnotu
editovat# definice funkce
def NecoNapis(text):
print(text)
# volání funkce
NecoNapis("Ahoj Pyhtone")
NecoNapis("1234")
NecoNapis(5+5)
NecoNapis([3,5,25,8])
Výstup:
Ahoj Pyhtone 1234 10 [3, 5, 25, 8]
Defaultní nastavení proměnné:
# definice funkce
def NecoNapis(text = "Ahoj"):
print(text)
# volání funkce
NecoNapis() # jeli parametr vynechán použije deflautní natavení "Ahoj"
NecoNapis(5)
NecoNapis("Python")
Výstup:
Ahoj 5 Python
Která vrací hodnotu
editovat# definice funkce
def Soucet(a, b):
return a + b
# volání funkce
print(Soucet(5,20))
print(Soucet(100,20))
Výstup:
25 120
# definice funkce
def Posloupnost(a, b):
return list(range(a, b))
# volání funkce
print(Posloupnost(5,12))
Výstup:
[5, 6, 7, 8, 9, 10, 11]
Variabilní počet argumentů
editovatV Pythonu můžeme funkci předat variabilní počet argumentů pomocí speciálních symbolů. Používá se, pokud není předem znám počet vstupních parametrů. Existují dva speciální symboly:
- *args (argumenty bez klíčových slov)
- **kwargs (argumenty klíčových slov)
*args
editovatSe použije pokud není předem znám počet vstupních parametrů.
# definice funkce
def myFun(*argv):
for arg in argv:
print (arg)
# volání funkce
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')
Výstup:
Hello Welcome to GeeksforGeeks
# definice funkce
def Soucet(*a):
s = 0
for i in a:
s = s + i
return s
# volání funkce
print(Soucet(3,5,10,5,7))
print(Soucet(3,5))
Výstup:
30 8
**kwargs
editovat# definice funkce
def myFun(**kwargs):
for key, value in kwargs.items():
print ("%s == %s" %(key, value))
# volání funkce
myFun(first ='Geeks', mid ='for', last='Geeks')
Výstup:
first == Geeks mid == for last == Geeks
# definice funkce
def Uzivatel(Jmeno, Prijmeni):
print(Jmeno)
print(Prijmeni)
# volání funkce
a = {"Jmeno" : "Jon", "Prijmeni": "Rambo"}
Uzivatel(**a)
Výstup:
Jon Rambo
# definice funkce
def Uzivatel(**parametry):
print(parametry) # vypíše jako slovník ve tvaru {proměnná : hodnota}
# volání funkce
Uzivatel(Jmeno = "Miloš", Prijmeni = "Kopecký", Vek = 73)
Výstup:
{'Jmeno': 'Miloš', 'Prijmeni': 'Kopecký', 'Vek': 73}
None
editovatKdyž funkce neskončí příkazem return, automaticky se vrátí hodnota None. Procedury v Pythonu vracejí právě toto „nic“:
def nic():
"""Tahle funkce nic nedělá """
print(nic())
Výstup:
None
Pokud funkce nějaký kód obsahuje, ten se provede, ale přesto vrátí nic, protože chybí příkaz return:
def nic():
print(20+5)
print(nic())
Výstup:
25 None
def nic():
for i in range(5):
print("řádek", i)
print(nic())
Výstup:
řádek 0 řádek 1 řádek 2 řádek 3 řádek 4 None
Využití
editovatFunkce na změnu v řetězci
editovatdef zamen(slovo, pozice, novy_znak):
#V daném slově zamění znak na dané pozici za daný nový znak.
zacatek = slovo[:pozice]
konec = slovo[pozice + 1:]
nove_slovo = zacatek + novy_znak + konec
return nove_slovo
print(zamen('kočka', 1, 'a'))
print(zamen('kačka', 2, 'p'))
print(zamen('kačka', 2, 't'))
print(zamen('kačka', 2, 'pát'))
Výstup:
kačka kapka katka kapátka
Zadej scóre a já ti povím jak si dopadl
editovatdef napis_hlasku(nazev, skore):
#Popíše skóre. Název má být přivlastňovací přídavné jméno.
print(nazev, 'skóre je', skore)
if skore > 1000:
print('Světový rekord!')
elif skore > 100:
print('Skvělé!')
elif skore > 10:
print('Ucházející.')
elif skore > 1:
print('Aspoň něco')
else:
print('Snad příště.')
napis_hlasku('Tvoje', 256)
napis_hlasku('Protivníkovo', 5)
Výstup:
Tvoje skóre je 256 Skvělé! Protivníkovo skóre je 5 Aspoň něco
Obsah elipsy
editovatfrom math import pi
def obsah_elipsy(a, b):
return pi * a * b
print('Obsah elipsy s poloosami 3 a 5 je', obsah_elipsy(3, 5), 'cm2')
Výstup:
Obsah elipsy s poloosami 3 a 5 je 47.12388980384689 cm2
Takový program se teoreticky dá napsat i s procedurou, tedy funkcí, která nic nevrací:
from math import pi
def obsah_elipsy(a, b):
print('Obsah je', pi * a * b) # Pozor, `print` místo `return`!
obsah_elipsy(3, 5)
Výstup:
Obsah je 47.12388980384689
Dělitelnost
editovatdef evenOdd(x):
if (x % 2 == 0):
print("číslo", x, "je sudé")
else:
print("číslo", x, "je liché")
# volání funkce
evenOdd(2)
evenOdd(3)
Výstup:
číslo 2 je sudé číslo 3 je liché
def delitel(x):
print("číslo", x, "je dělitelné:", end=" " )
seznam = []
for i in range(1, x):
if x % i == 0:
seznam.append(i)
print(seznam)
# volání funkce
delitel(12)
delitel(24)
Výstup:
číslo 12 je dělitelné: [1, 2, 3, 4, 6] číslo 24 je dělitelné: [1, 2, 3, 4, 6, 8, 12]