Funkce a operátory z Pythonu
Python má samozřejmě běžně známé operátory, jako je operátor přířazení =
,
operátor sčítání +
atd. V Pythonu lze používat i zkrácený zápis
operátoru, tj. místo promenna = promenna + x
můžete psát
promenna += x
, místo promenna = promenna / x
můžete psát promenna /= x
atd. To znáte už z jiných programovacích
jazyků.
Méně známé operátory a 'built-in' funkce Pythonu jsou tématem této lekce.
Převody mezi čísly
K převodům mezi čísly slouží tyto funkce:
int(),
a
long(), float()complex()
.
Příklad využití:
>>> x/2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'
>>> float(x)/2
1.5
Převody mezi seznami a n-ticemi
N-tice se převede na seznam funkcí
list(n-tice)
,
seznam na n-tici funkcí tuple(seznam)
.
V příkladu uvidíte, jak se vypořádat s tím, že typ n-tice je immutable (nelze měnit jeho obsah).
>>> y = y + (5,) # vytvoří se nová n-tice součtem n-tic y a (5,)
>>> y
(5, 1, 6, 1, 5)
>>> y[2] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> y = list(y)
>>> y[2] = 5
>>> y
[5, 1, 5, 1, 5]
>>> y = tuple(y)
>>> y
(5, 1, 5, 1, 5)
Funkce str() a repr()
Pokud chcete k řetězci přičíst výraz jiný než řetězec, můžete
použít vestavěnou funkci str()
, která se pokusí
převést cokoliv na řetězec (string).
Argumentem může být například seznam, nebo početní
výraz, např. a + b
.
"list: [0, 12, 'text']"
>>> 'cislo: '+str(3+5)+'.'
'cislo: 8.'
Funkce repr()
dělá téměř totéž co funkce str()
,
jenom vytiskne textovou reprezentaci objektu vhodnou pro parser pythonu
(pokud je to možné – jinak vyhodí výjimku SyntaxError
).
>>> str(s)
'Hello\nWorld'
>>> print(str(s))
Hello
World
>>> repr(s)
"'Hello\\nWorld'"
>>> print(repr(s))
'Hello\nWorld'
Objekty lze také převést na řetězec použitím formátování.
Zjištění typu výrazu
Typ výrazu lze zjistit funkcí type()
.
Verze Pythonu 2.7 a starší:
<type 'int'>
>>> type(1.0)
<type 'float'>
>>> type(3/2)
<type 'int'>
Verze Pythonu 3.0 a novější:
<class 'int'>
>>> type(1.0)
<class 'float'>
>>> type(3/2)
<class 'float'>
Zrušení proměnné
Ke zrušení proměnné se používá příkaz del
. Jeho použití je
vysvětleno v kapitole Datové typy při probírání
jmenných prostorů.
Příkaz del
může také smazat část seznamu.
Využívá se též ke zrušení funkce,
nebo zrušení části slovníku.
Funkce print()
Funkce print()
vytiskne na standardní výstup jakýkoliv typ,
který je mu předán jako argument (může jich být libovolný počet).
Funkce print()
mezi tištěnými argumenty vytvoří automaticky
jednu mezeru a na konec vytiskne konec řádky (\n).
Pokud nechcete vytisknout konec řádku, potom za poslední výraz napiště čárku.
Toto platí pro Python 2.7 a starší, kde print
nebyla funkce, ale
příkaz (viz příklad).
... print i
...
hello
world
>>> for i in ("hello","world"):
... print i,
...
hello world
V Pythonu 3.0 a novějším můžete funkci print()
předat
pojmenované argumenty sep
pro určení separátoru a
end
pro určení ukončení řádku.
hello, world
>>> for i in ("hello","world"):
... print(i,end="\t")
...
hello world >>>
Příkaz print
s výhodou využívá přetíženého operátoru
% (procento) při formátování výstupu.
Funkce len()
Funkce len()
vrací délku řetězce,
počet prvků v seznamu, n-tici nebo slovníku.
Pokud chcete předat jako výraz n-tici, je nutné jí uzavřít do závorek.
2
>>> len ("""'''""")
3
>>> len ((1,2,3))
3
>>> len (1,2,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: len() takes exactly one argument (3 given)
Funkce max() a min()
Tyto funkce vrací největší, resp. nejmenší indexovou hodnotu
objektu (například 'a' je menší než 'b', 1 je menší než 2 atp.).
Řetězce jsou vyhodnocovány jako vyšší hodnota, než čísla.
Python 3.0 a vyšší neumí porovnat objekty různých typů. Následující příklad
funguje v Pythonu 2.7, ale v Pythonu 3.0 vyhodí výjimku.
'CC'
Operátor in a not in
Operátor in
vrací hodnotu True (jedničku),
pokud se objekt v levo od operátoru nachází v objektu v pravo od operátoru,
jinak vrací False (nulu). U operátoru not in
je to obráceně.
True
>>> 've' not in 'Pavel'
False
>>> 'x' in [1, 'xx', None]
False
>>> 'key' in {'key' : 'value'}
True
>>> 'value' in {'key' : 'value'}
Funkce range() a xrange()
range(x)
vrací seznam čísel od 0 do xrange(x, y)
vrací seznam čísel od x do y.range(x, y, z)
vrací seznam čísel od x do y v posloupnosti dané argumentem z.
Funkce
range()
skutečně vrací typ seznam.
Funkce xrange()
se používá stejně jako range()
,
ale vrací typ 'xrange'. Jedná se o iterovatelný
objekt (jeho obsah mohou procházet cykly for
, while
atp.),
který generuje čísla až na požádání – nevytváří celý seznam, čímž šetří paměť.
Používá se pro velké rozsahy.
Od Pythonu verze 3.0 vrací range
typ 'range', který je obdobou typu 'xrange'.
Funkce xrange
už neexistuje.
... print (i)
...
0
1
2
3
4
>>> for i in range(0, -10, -2):
... print(i)
...
0
-2
-4
-6
-8
Funkce raw_input(), input() a eval()
Funkce raw_input()
a input
slouží k načtení dat
ze standardního vstupu (tedy nejčastěji
z klávesnice). Funkce input()
před vrácením
hodnoty zadaný výraz navíc vyhodnotí jako příkaz Pythonu
(zvažte bezpečnostní rizika použití funkce input()
).
Funkce mohou mít jeden argument, který požádá uživatele o vstup.
Zadej cokoliv: 3 + 5
'3 + 5'
>>> input('Zadej výraz Pythonu: ')
Zadej výraz Pythonu: 3 + 5
8
Funkce raw_input()
byla přejmenována na input()
.
K emulaci dřívjejšího chování funkce input
je potřeba
použít funkci eval()
, která interpretuje
textový řetězec jako zdrojový kód Pythonu.
Zadej cokoliv: 3 + 5
'3 + 5'
>>> eval(input('Zadej výraz Pythonu: '))
Zadej výraz Pythonu: 3 + 5
8
Příkaz pass
Příkaz pass
nedělá nic.
Používá se na místě, kde syntaxe jazyka Python vyžaduje příkaz a
vy tam žádný mít nechcete. Hodí se během vývoje, kdy ještě není
program dokončen, nebo třeba k definici tříd, které nic neobsahují.
... pass
...
>>>
Funkce dir()
Funkce dir()
vypíše seznam atributů objektu svého argumentu.
Podívejte se, co vypíše funkce dir()
, pokud dostane jako argument
objekt typu slovník, nebo řetězec. Co objekt obsahuje za hodnoty je
funkci dir()
jedno, v příkladu jsem použil jako argument prázdný
slovník a řetězec nulové délky.
['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'popitem', 'setdefault',
'update', 'values']
>>> dir ('')
['capitalize', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex',
'rjust', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper']
>>> 'veta1\nveta2'.splitlines(0)
['veta1', 'veta2']
>>> ' mezery mezery \t'.lstrip()
'mezery mezery \t'
>>> ' mezery mezery \t'.rstrip()
' mezery mezery'
Volání dir(__builtins__)
zobrazí všechny 'built-in' funkce Pythonu.
(Zdaleka ne všechny byli probrány v této kapitole).
Funkce help()
Zobrazí nápovědu, kterou najde v docstringu.
Zkuste si příkaz help(print)
. Takto funguje v
Pythonu 3. V Pythonu 2.7 funguje help('print')
, protože tam není
print
funkce.
Příkaz help(nazev_funkce)
dělá totéž, co print(nazev_funkce.__doc__)
.
(Zase platí, že v Pythonu 2.7 není print
funkce, takže pro print
to nezkoušjete.)