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(), long(), float() a complex().

Příklad využití:

>>> x = '3'
>>> 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 = (5, 1 ,6, 1)
>>> 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: '+str([0,12,'text'])
"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).

>>> s = "Hello\nWorld"
>>> 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(1)
<type 'int'>
>>> type(1.0)
<type 'float'>
>>> type(3/2)
<type 'int'>

Verze Pythonu 3.0 a novější:

>>> type(1)
<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).

>>> for i in ("hello","world"):
...     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.

>>> print("hello","world",sep=", ")
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.

>>> len({ 4:4, 5:'pet' })
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.

>>> max ((13005, 'CC', 0, 'C'))
'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ě.

>>> 've' in 'Pavel'
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 x
  • range(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.

>>>  for i in range(0,5):
...     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()

Následující odstavec a příklad platí pouze pro Python verze 2.7 a starší.

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.

>>> raw_input('Zadej cokoliv: ')
Zadej cokoliv: 3 + 5
'3 + 5'
>>> input('Zadej výraz Pythonu: ')
Zadej výraz Pythonu: 3 + 5
8
A teď jak je to pro Python verze 3.0 a novější:

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.

>>> input('Zadej cokoliv: ')
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í.

>>> for i in range(0,5):
...     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.

>>> dir ({})
['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'
Výstup je z Pythonu verze 2.1. Z novjějších verzích Pythonu by byl vrácený seznam atributů daleko delší.

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.)

Komentář Hlášení chyby
Created: 11.9.2005
Last updated: 30.8.2015
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..