Prostředkem pro nejzákladnější operace s daty jsou ve většině imperativních jazyků operátory, nejinak je tomu v Pythonu.
28.12.2004 15:00 | Aleš Hakl | přečteno 29519×
V pythonu kromě běžných unárních a binárních operátorů existují konstrukce, které ačkoli syntakticky jsou spíše voláním funkce, z pohledu Pythonu se jedná spíše o operátory. Tento rozdíl uvidíme v pozdějších dílech při objektově orientovaném programování.
Za úplně nejzákladnější operace (pokud vynecháme přiřazení
vysvětlené v minulém dílu) můžeme bezpochyby považovat
aritmetiku, zde nám Python nabízí základní operátory +, -,
* a / a navíc zbytek po celočíselném dělení reprezentovaný
operátorem %. Dalším aritmetickým operátorem je **
zajišťující umocňování. Nemusím doufám zdůrazňovat existenci
unárních operátorů + a -.
>>> 1+1 2 >>> 2*2 4 >>> 2-1 1 >>> 5%2 1 >>> 2**8 256
Výsledkem dělení celých čísel je opět celé číslo, které je vždy zaokrouhleno dolů.
Pro aritmetické operace také existuje několik výše zmíněných "pseudo-operátorů", jsou to:
abs(x) - Absolutní hodnota argumentuint(x) - Konverze na datový typ intlong(x) - Opět konverze, tentokrát na datový typ longfloat(x) - a opět...divmod(dělenec, dělitel) - Kombinace operací dělení a zbytku
po celočíselném dělení, výsledkem je n-tice o dvou položkach (tedy dvojice ^_^)
v pořadí (podíl, zbytek).
pow(základ, exponent) - Mocnina
Co by Python byl za programovací jazyk, pokud by neumožňoval provádět
logické operace. Python umí s logickými hodnotami provádět základní
booleovské operace or, and a not.
Priorita operátoru odpovídá pořadí ve výše uvedeném seznamu.
>>> True True >>> True and False False >>> True or False True >>> not True False
Python také umí provádět logické operace na jednotlivých bitech čísla.
Tyto operace je možné provádět na datových typech int a
long.
x | y - logický součet (OR)x ^ y - non-ekvivalence (XOR)x & y - logický součin (AND)x << počet_bitů - bitový posun dolevax >> počet_bitů -bitový posun doprava~x - negace (NOT)Priorita opět odpovídá výše uvedenému seznamu.
>>> 128 << 3 1024 >>> 128 >> 3 16 >>> 128 & 64 0 >>> 192 & 64 64 >>> 192 | 64 192 >>> 192 ^ 64 128
Pro sekvence (tj. ne jenom řetězce ale i například seznamy) zavádí Python poměrně velké množství operátorů umožnujicích provadět občas i poněkud netradiční operace.
prvek in sekvence - Zjistí jestli sekvence obsahuje daný prvekprvek not in sekvence - totéž jako předchozí,
pouze vratí True pokud sekvence daný prvek neobsahuje.x + y - Spojí dvě sekvence za sebe.sekvence * počet nebo
počet * sekvence
- Okopíruje sekvenci několikrát za sebe.
sekvence[index] - Vráti prvek určený indexemsekvence[první:poslední] - Vráti sekvenci
obsahující všechny prvky z daného rozsahu původní sekvence.sekvence[první:poslední:krok]
- Vratí sekvenci obsahující prvky s určeným rozestupem z daného rozsahu původní sekvence.
len(sekvence) - Počet prvků sekvencemin(sekvence) - Nejmenší prvek sekvencemax(sekvence) - Největší prvek sekvenceŽe uhodnete podle čeho poznáte prioritu těchto operátorů?
Pro měnitelné sekvence je možné použít všechny operátory s hranatými závorkami na levé straně
přiřazovacího příkazu. Dále je zaveden unární operátor del, kterým se da ze sekvence mazat
pomocí syntaxe del sekvence[index], případně je též možné
mazat prvky v nějakém rozsahu prostřednictvím dvojtečky.
>>> 'a' in ['a', 'b'] True >>> 'a' not in ('a','b') False >>> ('a','b') * 3 ('a', 'b', 'a', 'b', 'a', 'b') >>> s = ('a','b') >>> s[0] 'a' >>> t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> t[5:9] [5, 6, 7, 8] >>> t[5:9:2] [5, 7] >>> len(t) 10 >>> min(t) 0 >>> max(s) 'b'
V příštím díle se konečně podíváme na něco, co se dá nazvat progarmováním, a to některé v jazyce Python přítomné řídící struktury.