2.2. Proměnné a základní typy¶
Proměnná je jméno, které pomocí operátoru = svážete s hodnotou. Po přiřazení lze toto jméno použít všude tam, kde lze použít danou hodnotu:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
Nejprve se vyhodnotí pravá strana =, a poté se výsledek sváže se jménem nalevo. Čtení jména, kterému nikdy nebyla přiřazena hodnota, vyvolá NameError.
Proměnná je jen štítek. Ukazuje na hodnotu – hodnota žije jinde a tatáž hodnota může mít libovolný počet štítků.
Proměnné jsou štítky ukazující na hodnoty. Opětovné přiřazení proměnné posune štítek; nemění hodnotu, na kterou štítek dříve ukazoval.¶
2.2.1. Pravidla pojmenování¶
Jména začínají písmenem nebo podtržítkem a mohou obsahovat písmena, číslice a podtržítka.
frame_counta_internaljsou v pořádku;1st_frameje syntaktická chyba.Na velikosti písmen ve jménech záleží:
Widthawidthjsou dvě různé proměnné.Vyhněte se opětovnému použití vestavěných jmen jako
list,str,id()neboprint()– jejich zastínění nevyvolá chybu, ale původní vestavěné jméno se po zbytek skriptu stane nedostupným.Konvence:
snake_casepro proměnné a funkce,ALL_CAPSpro konstanty, které neplánujete měnit,CamelCasepro názvy tříd.
2.2.2. Základní typy¶
Každá hodnota v Pythonu má typ, který určuje, jaké operace podporuje. Čtyři typy, které budete psát nejčastěji, jsou:
int – celá čísla, kladná i záporná. Celá čísla v MicroPythonu rostou tak velká, jak dovolí paměť. Literály se zapisují jako prosté číslice:
0,42,-7. Platné a užitečné pro registry a bitové masky jsou také hexadecimální (0x1A), osmičkové (0o17) a binární (0b1010) literály.float – čísla s desetinnou čárkou nebo exponentem:
3.14,1.0,-0.5,2e6(= 2 000 000,0). Všechny float hodnoty na kameře jsou 32bitové podle IEEE 754 – přesné zhruba na sedm platných číslic.bool – jeden ze dvou literálů
TrueneboFalse(všimněte si velkých počátečních písmen).str – text zapsaný jako znaky mezi jednoduchými nebo dvojitými uvozovkami:
"hello",'OpenMV'. Oba styly uvozovek jsou rovnocenné; zvolte ten, který vám umožní vyhnout se escapování uvozovek vyskytujících se uvnitř řetězce.
Existuje i pátá hodnota, kterou stojí za to znát hned:
None – jediná hodnota typu
NoneType. Používá se ve významu „žádná hodnota“ nebo „dosud nenastaveno“. Funkce, které nic explicitně nevracejí, implicitně vracejíNone.
2.2.3. Kontrola a převod typů¶
Vestavěná funkce type() vrací typ libovolné hodnoty:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Každý typ slouží zároveň jako převodní funkce. Předejte jí hodnotu jiného typu a dostanete zpět ekvivalentní hodnotu nového typu – pokud je převod jednoznačně definován:
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
Převody, které nejsou jednoznačně definovány, vyvolají ValueError:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Opětovné přiřazení a dynamické typování¶
Jméno lze kdykoli znovu přiřadit hodnotě libovolného typu. Následující je přípustné:
x = 42
x = "now I'm a string"
x = 3.14
Python nesvazuje proměnnou s typem. Kód, který závisí na tom, že x je celé číslo, jednoduše očekává celé číslo v místě, kde jej použije; pokud dostane něco jiného, dojde za běhu k chybě TypeError.
Poznámka
Opětovné přiřazení x nemění hodnotu, na kterou ukazovala stará vazba. Pokud dvě jména sdílejí tutéž hodnotu, opětovné přiřazení jednoho neovlivní druhé:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Mutace sdílené hodnoty je něco jiného: metoda jako list.append mění hodnotu, na kterou vazba ukazuje, takže každé další jméno ukazující na tutéž hodnotu změnu uvidí.