Lokální proměnné
Uvnitř funkce můžete vytvářet proměnné stejně jako kdekoli jinde. Taková proměnná ale existuje jen uvnitř funkce: vznikne, když se funkce spustí, a zanikne, když funkce skončí. Mimo funkci ji Python nezná:
def rekni_ahoj():
zprava = "Ahoj!"
print(zprava)
rekni_ahoj()
print(zprava)Tento kód vypíše:
Ahoj!
Traceback (most recent call last):
File "<exec>", line 6, in <module>
NameError: name 'zprava' is not definedVolání rekni_ahoj() proběhlo v pořádku, ale poslední řádek hledá zprava mimo funkci, kde tato proměnná neexistuje. Stejné je to s parametry: existují jen uvnitř své funkce.
Části programu, ve které proměnná existuje, se říká obor platnosti proměnné (anglicky scope). Proměnná vytvořená uvnitř funkce je lokální: patří jen této funkci. Proměnnou vytvořenou mimo všechny funkce můžete používat v celém programu, i uvnitř funkcí:
nazev_obchodu = "Zverimex Packa"
def vypis_stitek(produkt):
print(f"{nazev_obchodu}: {produkt}")
vypis_stitek("krmivo pro psy")Tento kód vypíše:
Zverimex Packa: krmivo pro psyProč je užitečné, že lokální proměnné zůstávají uvnitř svých funkcí?
- Funkce si navzájem nepřekážejí. Dvě funkce mohou mít každá svou proměnnou
celkema jsou to dvě různé proměnné: změna jedné nezmění tu druhou. - Abyste mohli funkci použít, stačí vědět, co jí dát (argumenty) a co vrací (návratovou hodnotu). Jak funguje uvnitř, je její věc.
- Každé volání začíná znovu: proměnné funkce vzniknou nanovo a nic z předchozího volání v nich nezůstane.
Funkce může proměnnou zvenku přečíst, ale nemůže ji jen tak změnit. Když do proměnné uvnitř funkce přiřadíte hodnotu, Python vytvoří novou lokální proměnnou, i když venku existuje proměnná se stejným názvem:
skore = 10
def vynuluj_skore():
skore = 0
vynuluj_skore()
print(skore)Tento kód vypíše:
10Funkce si vytvořila vlastní lokální proměnnou skore a nastavila ji na 0, ale skore venku zůstalo 10. (A skore += 1 uvnitř funkce by dokonce skončilo chybou UnboundLocalError.)
Pravidlo je tedy jednoduché: hodnoty se do funkce dostávají přes parametry a ven z ní pomocí return. Když potřebujete hodnotu zevnitř funkce, nesahejte po její proměnné. Vraťte hodnotu pomocí return a uložte si ji tam, kde funkci voláte.
Jak psát:
Pokyny
Program skončí chybou NameError: name 'celkem' is not defined, protože celkem existuje jen uvnitř funkce. Opravte ho: vraťte celkem z funkce. Pod funkcí uložte výsledek volání celkova_cena(25, 4) do proměnné ucet a místo celkem vypište ucet. Program vypíše 100.
Ke každé objednávce se navíc platí 5 za dopravu. Přidejte funkci třetí parametr, doprava, s výchozí hodnotou 5 a uvnitř funkce ho přičtěte k celkové ceně. Program pak vypíše 105.
Začněte programovat zdarma
8/10