Už víš, že Python se dá použít jako kalkulačka: dokáže spočítat
hodnotu výrazu (angl. expression) jako 3 * (5 + 2).
Jak to ale vlastně dělá?
Jak se vyhodnocují výrazy?
Pro základní výrazy je to tak, jak to možná znáš ze školy.
U 3 * (5 + 2) nejdřív spočítáš to, co je v závorkách: (5 + 2) je 7.
Výsledek dosadíš do původního výrazu místo závorky: 3 * 7.
Stejně fungují výrazy v Pythonu.
Možná to zní jednoduše, ale protože budeme ten samý postup používat i na složitější výrazy, hodí se ho umět „rozepsat":
vysledek = 3 * (5 + 2) # ╰──┬──╯ vysledek = 3 * 7 # ╰─┬────╯ vysledek = 21
Když Python potřebuje vyhodnotit proměnnou, dosadí její hodnotu.
Pokud je zrovna v proměnné a číslo 4, za a se dosadí 4:
a = 4 b = 5 vysledek = (a + b) / a # | | | vysledek = (4 + 5) / 4 # ╰──┬──╯ vysledek = 9 / 4 # ╰────┬─╯ vysledek = 2.25
Funguje to i u složitých výrazů. Python se složitými výrazy nemá problém. Jen člověk, který program čte či píše, se v nich může lehce ztratit. Když opravdu potřebuješ napsat složitý výraz, je dobré jej rozdělit na několik menších nebo vysvětlit pomocí komentáře.
Je ale dobré mít povědomí o tom, jak složité výrazy „fungují", aby ses jich nemusel/a bát. Měl/a bys být schopný/á vysvětlit, co se stane, když se Pythonu zeptáš, kolik je -b + (b2 + 4ac)0·5 / (2a), abys pak věděl/a, co za tebe Python dělá.
a = 2 b = 5 c = 3 x = -b + (b ** 2 + 4 * a * c) ** 0.5 / (2 * a) # | | | | | x = -5 + (5 ** 2 + 4 * 2 * 3) ** 0.5 / (2 * 2) # ╰──┬─╯ ╰─┬─╯ ╰──┬──╯ x = -5 + ( 25 + 8 * 3) ** 0.5 / 4 # ╰────┬─╯ x = -5 + ( 25 + 24 ) ** 0.5 / 4 # ╰───────┬──────────╯ x = -5 + 49 ** 0.5 / 4 # ╰──────┬──────────╯ x = -5 + 7.0 / 4 # ╰─────────────┬────╯ x = -5 + 1.75 # ╰──────────────┬───────────────────╯ x = -3.25
Výrazy se používají na více místech Pythonu než jen v přiřazování
do proměnných.
Třeba podmínka u if je taky výraz a vyhodnocuje se stejně jako ostatní
výrazy:
strana = -5 if strana <= 0: print("Strana musí být kladná!")
if strana <= 0: # ╰──────┬──╯ if True :
Uprav tuto stránku na GitHubu
Pro PyLadies Brno napsal Petr Viktorin, 2019.
Licence: Creative Commons Attribution-ShareAlike 4.0 International