04 Proměnné

Datové typy

V programu ukládáme hodnoty pro výpočet a výsledky výpočtů do proměnných. V Pythonu se nedeklaruje datový typ proměnné. Každá proměnná má takový typ jaký ji byl naposledy přiřazen. To znamená, že proměnná může během svého života datový typ měnit. Výhodou je, že se proměnné rychle v programu zadávají. Nevýhodou je, že když uděláme překlep, tak nás na to nikdo (myšleno překladač) neupozorní.

Nejjednodušším datovým typem je číslo. Takto vytvoříme proměnnou a typu číslo s hodnotou 4.

a = 4

Velmi často používaným datovým typem je řetězec znaků. Pokud bude řetězec obsahovat znaky s diakritikou, tak nesmíme zapomenout tyto znaky zakódovat.

navest_volno = ”Volno”

navest_stuj = ”Stůj”.decode(”UTF-8”)

Zapisování hodnoty řetězců je možno provést dvěma způsoby. Buď uzavřeme hodnotu do dvojité nebo jednoduché uvozovky. Je jedno který způsob si vybereme. Je dobré používat v programech pouze jeden způsob.

jednoduche_uvozovky = ‘jednoduché’.decode(‘UTF-8’)

dvojite_uvozovky = “dvojité”.decode(“UTF-8”)

Nejčastěji bude proměnná obsahovat nějaký objekt. Objekt je složitější datová struktura, která má více atributů a metod. Například proměnná vyhybka_1 má atributy stav, systémový název, uživatelský název a další.

print vyhybka_1.getState()

print vyhybka_1.getSystemName()

print vyhybka_1.getUserName()

Dále mohou existovat proměnné, které obsahují množinu jiných objektů. Například vsechny_snimace je množina všech objektů snímač.

vsechny_snimace = jmri.InstanceManager.getDefault(jmri.SensorManager).getNamedBeanSet()

Rozsah platnosti proměnných

Rozsah platnosti proměnných v Pythonu má pro začátečníka svá úskalí. Nejužší rozsah platnosti proměnné je v rámci jedné funkce. Proměnné použité ve funkci platí pouze v této funkci. Pokud je použito stejné jméno proměnné mimo funkci, potom tato proměnná ve funkci překryje proměnnou v programu.

# rozsah_1.py

a = 4

def fce_a() :

    a = 10

    return a

b = fce_a()

print a, b

V programu rozsah_1.py je dvakrát definovaná proměnná a. Proměnná uvnitř funkce fce_a() je ale jiná než proměnná definovaná na začátku programu. Na konci programu budou vypsána čísla 4 a 10. První číslo 4 je obsah proměnné a z programu, druhé číslo 10 je hodnota a z funkce.

Proměnné v programu mimo funkce jsou platné pro celý program a všechny skripty z něj volané. Mějme dva skripty rozsah_2.py a rozsah_3.py.

# rozsah_2.py

a = 4

execfile(jmri.util.FileUtil.getExternalFilename("scripts:rozsah_3.py"))

print a

# rozsah_3.py

a = 8

Spustíme skript rozsah_2.py a z něho zavoláme skript rozsah_3.py. Nakonec vytiskneme obsah proměnné a. Protože proměnná a nebyla použita v žádné funkci, tak platí ve všech skriptech které byly volány. Napřed byla proměnná a naplněna hodnotou 4 ve skriptu rozsah_2.py. Potom byla přepsána hodnotou 8 ve volaném skriptu rozsah_3.py. Nakonec byla vytištěna poslední hodnota proměnné a která byla 8.

Způsob přiřazení hodnoty

U obyčejných proměnných přiřazujeme hodnotu proměnným znakem pro přiřazení =. Na levé straně je proměnná a na pravé straně je hodnota.

a = 4

b = “slovo”

U objektů je možné přiřazovat některým atributům hodnoty pomocí příkazu přiřazení.

vyhybka_1.commandedState = THROWN

Stejný výsledek bude mít přiřazení hodnoty atributu objektu pomocí metody.

vyhybka_1.setCommandedState(THROWN)

V programu z důvodu čitelnosti by se měl používat pouze jeden způsob přiřazení hodnot atributům.

vytvořeno 15. 9. 2019