Numerické funkce  (pokračovaní)

Pro ilustraci vestavěných matematických funkcí lze uvést ty, které jsou používány nejčastěji:

abs

abs(číslo)

            Vrátí absolutní hodnotu argumentu.

coerce

coerce(číslo1, číslo2)

            Vrátí tuple ... (výsledek1, výsledek2). Tuple je datový typ, o němž bude řeč později, v sekci pojednávající o sekvenčních datových typech. Výsledky reprezentují čísla (číslo1 a číslo2) převedené  na stejný číselný typ. Výsledným datovým typem je přesnější datový typ.

       >>> cislo1 = 123
>>> cislo2 = 2L
>>> coerce(cislo1, cislo2)
(123L, 2L)
>>> 
>>> cislo3 = 0.5
>>> coerce(cislo1, cislo3)
(123.0, 0.5)
>>> 
>>> coerce(cislo2, cislo3)
(2.0, 0.5)

divmod

divmod(x, y)

            Vrátí tuple celých čísel. První položka je celočíselný podíl x/y, druhá položka je zbytek po dělení. Čísla předaná funkci nemusí mít celočíselný datový typ. (Tuple, viz. coerce ...).

pow

pow(základ, exponent [, mod])

            Vrátí hodnotu základ ** exponent. Pokud je zadána i nepovinná hodnota mod, výsledek je roven (základ ** exponent) % mod.

round

round(číslo, počet_číslic=0)

            Vrátí číslo zaokrouhlené na zadaný počet číslic.

int, long, float a complex

Pro typovou konverzi lze použít funkce int(), long(), float() a complex() jak je patrné z níže uvedených příkladů:


>>> int(3.5)
3
>>> 
>>> long(22)
22L
>>> 
>>> float(3)
3.0

Řetězce

Protože v Jythonu je všechno objektem, tak i řetězce jsou objekty. To znamená, že s řetězcem se pracuje jako s objektem a nikoliv jako s polem znaků. Je potřeba dát pozor na skutečnost, že řetězce jsou konstantní, což znamená, že jednou vytvořený řetězec již nelze měnit. Jython neobsahuje vestavěnou třídu proměnných řetězců, která by byla ekvivalentem třídy StringBuffer v Javě. Obdobně jako v Javě, i v Jythonu, jsou řetězce vnitřně kódovány v kódování Unicode.

Existuje několik různých způsobů jak lze vytvářet řetězcové konstanty. Řetězce mohou být uzavřeny jak ve dvojitých uvozovkách tak v jednoduchých uvozovkách:

>>> "Retezec ve dvojitych uvozovkach"
'Retezec ve dvojitych uvozovkach'
>>> 
>>> 'Retezec v jednoduchych uvozovkach'
'Retezec v jednoduchych uvozovkach'
>>> 
>>> msg = '"Warovani!!!" je asi spatne napsane'
>>> msg
'"Warovani!!!" je asi spatne napsane'

Uvnitř uvozovek je možné uvést speciální znaky pomocí „escape" sekvencí. „Escape" sekvence použitelné v Jythonu jsou uvedeny v tabulce 2-1.

Tab. 2-1. „Escape" nejdůležitější sekvence použitelné v Jythonu

„Escape" sekvence

Význam

\\

Zpětné lomítko

\‘

Apostrof

\"

Uvozovky

\r

Návrat vozíku

\t

Tabulátor

\uxxxx

16-bitový znak Unicode, xxxx (hex)

\b

Couvnutí (znak backspace)

\f

Nová stránka

\n

Nový řádek

\N{jmeno}

Znak Unicode identifikovaný pomocí jmeno

\Uxxxxxxxx

32 - bitový znak Unicode, xxxxxxxx (hex)

\xhh

8 - bitový znak Unicode v hexadecimálním zápisu

Nyní se podíváme na základní operace s řetězci. Řetězce je možné spojovat. Řetězce uvedené vedle sebe jsou spojeny automaticky. Je možné použít i operátor + (křížek):

>>> 'prvni'  " druhy retezec"
'prvni druhy retezec'
>>> 
>>> slovo = 'prvni retezec' + ' a druhy retezec'
>>> 
>>> slovo
'prvni retezec a druhy retezec'

Operátor * (hvězdička) slouží k opakování řetězce:

>>> leva_zavorka = '<'
>>> prava_zavorka = '>'
>>> leva_zavorka * 3 + "AHOJ" + prava_zavorka * 3
'<<<AHOJ>>>'

Řetězce mohou být také indexovány. To znamená, že lze přistupovat k libovolné části řetězce prostřednictvím indexů. První znak v řetězci má index 0. V Jythonu neexistuje žádný datový typ analogický k datovému typu char v Javě. Znak je jednoduše řetězec s délkou 1.

>>> slovo = "Popokatepetl"
>>> 
>>> slovo
'Popokatepetl'
>>> slovo[0]
'P'
>>> slovo[4]
'k'

Řetězec je možné též indexovat se zápornými indexy. Poslední znak v řetězci lze například získat takto:

>>> slovo
'Popokatepetl'
>>> slovo[-1]
'l'

Jak již bylo uvedeno dříve, řetězce jsou konstatní a nelze je změnit. Pokus o změnu na indexované pozici skončí chybou:

>>> slovo
'Popokatepetl'
>>> slovo[0] = 'K'
Traceback (innermost last):
  File "<console>", line 1, in ?
TypeError: can't assign to immutable object

Mezi pokročilejší prvky v práci s řetězci, a jak později uvidíme nejen s řetězci, patří takzvané "výřezy" (anglicky slices, slice annotation). Jedná se o konstrukci, kdy z určitého řetězce vyberete pouze některé znaky. Výřezy je možné zadávat uvedením rozmezí od : az_do. Horní rozmezí je od dolního odděleno dvojtečkou.

>>> slovo = 'Popokatepetl'
>>> 
>>> slovo[0:4]
'Popo'
>>> 
>>> slovo[4:6]
'ka'

Výřezy mají definovány užitečné defaultní hodnoty. První index, pokud jej nezadáme, má defaultní hodnotu 0, druhý index je defaultně nastaven na délku řetězce.

>>> slovo = 'Popokatepetl'
>>> slovo[:2]           #Prvni dva znaky
'Po'
>>> slovo[:4]           #Prvni ctyri znaky
'Popo'
>>> slovo[4:]           #Vsechny znaky krome prvnich 4
'katepetl'
>>> slovo[-2:]          #Posledni dva znaky
'tl'
>>> slovo[:-2]          #Vsechny znaky krome poslednich 2
'Popokatepe'

Pozn.: výřez vždy vrací nový objekt definovaný rozmezím od : az_do.

Mezi základní funkce pro práci s řetězci lze uvést následující:

len

len(řetězec)

            Vrátí počet znaků v řetězci

     >>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

ord

ord(znak)

            Vrátí celé číslo odpovídající kódování znaku.

chr

chr(číslo)

            Vrátí řetězec délky 1, obsahující znak odpovídající danému kódovaní. Argument číslo může nabývat hodnot 1 - 255.

unichr

unichr(číslo)

            Vrátí Unicode řetězec délky 1, obsahující znak odpovídající danému kódovaní. Argument číslo může nabývat hodnot 1 - 65535. V Jythonu není rozdíl mezi funkcemi chr() a unichr().