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 28750×
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 int
long(x)
- Opět konverze, tentokrát na datový typ long
float(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.