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 | czytane 28982×
RELATED ARTICLES
KOMENTARZE
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í.
Aritmetické operátory
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 argumentu
int(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
Logické operace
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
Bitové operace
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 doleva
x >> 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
Sekvence
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ý prvek
prvek 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ý indexem
sekvence[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ů sekvence
min(sekvence)
- Nejmenší prvek sekvence
max(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.