98
Kapitola 6 Proměnné
6.3 Pravidla pro tvorbu identifikátorů V programech používáme značné množství nejrůznějších proměnných. Proměnnou proto musíme pojmenovat, abychom později, až budeme chtít uloženou hodnotu použít, mohli interpretu jednoznačně sdělit, kde je hodnota uložena. Kdykoliv chcete použít objekt, na nějž proměnná odkazuje, zadáte v kódu název proměnné a interpret zařídí, aby byl použit odkazovaný objekt. Pro názvy proměnných se používá termín identifikátory, protože slouží k jejich identifikaci. V Pythonu platí pro identifikátory následující pravidla:
● Smějí obsahovat písmena, číslice a podtržítka. ● Nesmějí začínat číslicí. ● Rozlišuje se v nich velikost písmen. ● Nesmějí být shodné s klíčovým slovem – viz tabulku 6.1. Tabulka 6.1: False await else import pass
Klíčová slova jazyka Python
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
Klíčová slova tvrdá a měkká Od verze 3.10 rozlišuje Python dva druhy klíčových slov.
● Standardní klíčová slova (anglicky keywords) uvedená v tabulce 6.1 a platná všude. (Mohli bychom je označit jako tvrdá, ale tento přívlastek se nepoužívá.) ● Verze 3.10 zavedla tzv. měkká klíčová slova (anglicky soft keywords), s nimiž je třeba zacházet jako s klíčovými slovy jen v určitém kontextu. Ve zbytku programu je můžeme používat jako identifikátory. Ve verzi 3.10 jsou zavedena tři měkká klíčová slova: match, case a _ (podtržení). Se všemi se setkáte při výkladu příkazu match v podkapitole 14.5 Přepínač match na straně 216. Zavedení měkkých klíčových slov umožňuje definovat rozšíření jazyka, ve kterých jsou použita klíčová slova, jež jsou zavedena jako měkká. Tak nevzniknou problémy se staršími verzemi programů, kde byla tato slova použita jako identifikátory. V těchto starších částech se totiž nepoužívají nově zaváděné konstrukce, takže nemůže dojít k nesrovnalostem. Když se programátor rozhodne používat nově zavedené konstrukce, musí v příslušné části programu zkontrolovat, zda nepoužívá identifikátory shodné s potřebnými měkkými klíčovými slovy, a pokud ano, tak tyto identifikátory vhodně změnit a příslušné proměnné přejmenovat. 71_Python_3,11_ZLOM.doc; verze 1.03.9189_2023-01-13_pá_00-52
Strana 98 z 598 Ukázka elektronické knihy, UID: KOS520681
6.4 Zavedení proměnné – přiřazovací příkaz
99
Měkká klíčová slova nejsou vynálezem Pythonu. Obdobný obrat se používá i v řadě jiných jazyků. Např. Java, která je jedním z nejrozšířenějších programovacích jazyků, zavedla obdobným způsobem omezené identifikátory (anglicky restricted identifiers) var a yield a vedle nich ještě deset omezených klíčových slov (anglicky restricted keywords) používaných jako klíčová slova jen v přesně definovaných situacích.
Systémové identifikátory – dundery Mezi identifikátory mají v Pythonu zvláštní postavení ty, která začínají a končí dvěma podtržítky – např. __name__. To jsou systémové identifikátory (dokumentace je označuje jako system-defined names), které mají předem daný speciální význam. Tyto identifikátory se často označují jako dunder names, nebo zkráceně dunders, což je zkratka z anglického double underlines – dvojité podtržení.
Jazykoví puristé mi snad prominou, že budu termín dunder (vyslovováno dandr) v dalším textu používat a skloňovat, protože jeho používání výrazně zkracuje (a řekl bych i zpřehledňuje) některé formulace.
Python používá přes sto dunderů. S řadou z nich vás postupně seznámím, ale vedle nich existuje celá řada dalších, na které narazíte při používání některého rysu jazyka. Dokumentace varuje, že jakékoliv použití vlastních názvů začínajících a končících dvěma podtržítky může vést k nenadálému zhroucení programu. Nesnažte se proto vymýšlet vlastní „dundery“.
6.4 Zavedení proměnné – přiřazovací příkaz Chceme-li pro potřeby našeho programu zavést nějakou proměnnou, do níž bychom mohli ukládat hodnoty, které si program potřebuje zapamatovat, vymyslíme pro ni vhodný název a inicializujeme ji přiřazovacím příkazem. V něm zapíšeme název proměnné následovaný rovnítkem a výrazem definujícím její počáteční hodnotu, jak je tomu např. na řádku 1 ve výpisu 6.1. Zadáme-li v interaktivním režimu jako příkaz samotný název proměnné (řádek 2), Python vypíše její hodnotu (řádek 3). Zadáme-li však název proměnné, do které jsme ještě žádnou hodnotu neuložili (řádek 4), Python ohlásí chybu, protože z jeho pohledu tato proměnná neexistuje (na řádku 8 nám oznamuje, že proměnná doposud není definovaná). Pro Python totiž začne proměnná existovat až po své inicializaci, tj. až poté, co do ní uložíme počáteční hodnotu. Jakmile do proměnné s daným názvem uložíme nějakou hodnotu (řádek 9), Python začne být ochoten s touto proměnnou pracovat. 71_Python_3,11_ZLOM.doc; verze 1.03.9189_2023-01-13_pá_00-52
Strana 99 z 598 Ukázka elektronické knihy, UID: KOS520681
100
Kapitola 6 Proměnné
Potřebujete-li z nějakého důvodu vytvořit proměnnou před tím, než do ní poprvé uložíte potřebnou hodnotu, můžete do ní uložit na počátku např. odkaz na None. Tím ji vytvoříte, a pak už k ní můžete přistupovat jako ke standardní, existující proměnné. Výpis 6.1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Přiřazení hodnoty proměnné
>>> a = 123 >>> a 123 >>> a = a + x Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> a = a + x NameError: name 'x' is not defined >>> x = "Žiju!" >>> x 'Žiju!' >>> a = 'Sto dvacet tři' >>> a 'Sto dvacet tři' >>> a = None #Tím vlastně říkám, že v proměnné nic není >>> a #Je-li hodnotou proměnné None, intepret ji netiskne >>>
Jakmile je proměnná zavedena, můžeme do ní ukládat hodnoty, které si potřebujeme zapamatovat. Uložíme-li však do ní hodnotu None reprezentující nic, interpret v interaktivním režimu po zadání názvu proměnné nic nevytiskne (viz reakce na příkazy na řádcích 15 a 16). O tom, že interpret tuto hodnotu netiskne, jsme si však říkali již v podkapitole 2.6 Nic – None na straně 57.
Programátory, kteří doposud pracovali s tzv. přísně typovými jazyky, asi zaskočí, že Python nijak neomezuje typ ukládané hodnoty. Jak ve výpisu 6.1 naznačuje přiřazení na řádku 12 a reakce systému na příkaz zadaný na řádku 13, to, že jsme do proměnné uložili číslo, nám nijak nebrání, abychom do ní příště uložili třeba text.
Jak je naznačeno v podšeděném bloku Přísné a benevolentní programovací jazyky na straně 51, Python řadíme mezi benevolentní programovací jazyky, protože se snaží minimalizovat své požadavky na to, co programátor musí a nesmí. Tato svoboda ale vyžaduje důkladnější testování napsaného kódu, v němž mnohem snadněji vznikají různé běhové a logické chyby. Ukázku takové relativně nenápadné chyby předvádí výpis 6.2. Na řádku 5 je v něm místo celočíselného dělení použito obyčejné, o němž víme, že jeho výsledkem je vždy reálné číslo. Jenomže reálným číslem nesmíme násobit text, takže příkaz na řádku 6 vyvolá běhovou chybu. 71_Python_3,11_ZLOM.doc; verze 1.03.9189_2023-01-13_pá_00-52 Ukázka elektronické knihy
Strana 100 z 598