Asociativní pole (pokračování)

Podívejme se, jaké operátory lze aplikovat na
asociativní pole. Na asociativní pole nelze aplikovat
metody a operátory využívající vlastnost uspořádání
seznamu, zvláštěpak operace využívající konceptu
výřezů nebo spojování seznamů.

Pokud potřebujeme zjistit, zda se v našem poli
vyskytuje konkrétní klíč, použijeme metodu has_key():

>>> tel

{'kotelna': 111111, 'jirka': 123456, 'stefan': 789232}

>>> tel.has_key('kotelna')

1

>>> tel.has_key('lopata')

0

Pro práci s asociativními poli existují tři metody,
které umožňují konvertovat asociativní pole nebo jeho
části na sekvenci hodnot:

keys()

Vrátí seznam všech klíčů vyskytujících se v
asociativním poli.

>>> tel

{'kotelna': 111111, 'jirka': 123456, 'stefan': 789232}

>>>

>>> tel.keys()

['kotelna', 'jirka', 'stefan']

values()

Vrátí seznam všech hodnot uložených v
asociativním poli.

>>> tel.values()

[111111, 123456, 789232]

items()

Vrátí seznam obsahující tuple složené z dvojice
klíč : hodnota pro každou z těchto
dvojic.

>>> tel.items()

[('kotelna', 111111), ('jirka', 123456), ('stefan', 789232)]

Pokud použijete metody asoc_pole.keys() a asoc_pole.values(), bez toho, aby byl obsah
pole asoc_pole mezi následným voláním
metod změněn, je zaručena shoda v indexech obou
metod, tj. platí, že dvojice key[0] :
value[0]
odpovídá první dvojici klíč :
hodnota
, atd. ….

>>> pole = {1: 'a', 2: 'b', 3: 'c'}

>>>

>>> key = pole.keys()

>>> value = pole.values()

>>>

>>> pole

{3: 'c', 2: 'b', 1: 'a'}

>>> key

[3, 2, 1]

>>> value

['c', 'b', 'a']

Souborový datový typ: Jython Files

Obdobně jako většina skriptovacích jazyků nabízí
Jython přímou podporu k přístupu k souborům
prostřednictvím vestavěné funkce open
a vestavěného datového typu. Pro základní
vstupně/výstupní operace vestavěná podpora plně
postačuje. Později si ukážeme, že v případě potřeby
je možné plně využívat knihovní funkce javového
balíku java.io.

Funkce open má následující syntaxi

soubor = open(nazev_souboru, mod)

kde mod může být jeden z řetězců:
‘r', ‘w', ‘a', ve významu:
čtení, zápis a připojení ke konci souboru. K řetězcům
označujícím způsob otevření souboru je možné připojit
jako příponu řetězec ‘t' nebo
‘b', ve významu textový popřípadě
binární způsob zpracování.

>>> soubor = open('in.txt', 'r')

>>>

>>> soubor

<file in.txt, mode r at 2572393>

Všechny vstupně/výstupní operace se soubory pracují
s řetězci. V Jythonu jsou všechny řetězce interně
zpracovávány v kódování Unicode. Otázky týkající se
způsobů kódování budou probrány v dalších kapitolách.

Vestavěný datový typ, reprezentující otevřený
soubor, obsahuje následující metody:

close()

Zavře otevřený soubor.

flush()

Vyprázdní vstupně/výstupní proud.

read([počet_bajtů])

Přečte celý soubor. Je-li zadán nepovinný
argument [velikost], přečte se
příslušný počet bajtů ze souboru. Přečtená data se
vrátí jako řetězec.

readline([počet_bajtů])

Přečte ze souboru celou řádku, nebo příslušný
počet bajtů z řádky. Je-li dosaženo konce souboru,
vrátí se prázdný řetězec. Vrácený řetězec obsahuje
na konci znak ‘\n'.

readlines([počet_bajtů])

Přečte celý soubor, nebo příslušný počet bajtů.
Vrátí seznam, ve kterém každý prvek odpovídá
jednomu přečtenému řádku.

>>> soubor = open('in.txt', 'r')

>>> soubor.readlines()

['name: g1\n', 'mem: a, b, g2\n', '\n', 'name: g2\n', 'mem: a, d\n', '\n']

seek(offset, počátek)

Nastaví běžnou pozici kurzoru v souboru pro
následující operace. Defaultní hodnota 0 pro
argument počátek bude
interpretována, že offset bude
počítán vůči počátku souboru. Je-li hodnota
parametru počátek == 1, je offset počítán relativně vůči stávající
pozici. Pro počátek == 2 se offset počítá relativně vůči konci
souboru.

tell()

Vrátí běžnou pozici kurzoru v souboru.

truncate([počet_bajtů])

Zkrátí soubor na danou velikost nebo, pokud
velikost není zadána, k běžné pozici kurzoru v
souboru.

write(řetězec)

Zapíše obsah řetězce řetězec do
souboru. Návratová hodnota je None.

writelines(seznam)

Zapíše řetězce ze seznamu seznam
do souboru. Do souboru nejsou automaticky vkládány
žádné znaky ‘\n', aby byla
funkce komplementární k readlines().

Následuje malá ukázka výše uvedených metod:

>>> f = open('novy.txt', 'w')

>>> f.write('Toto\n')

>>> f.writelines(['je maly\n', 'novy\n', 'soubor\n'])

>>> f.close()

>>>

>>> f = open('novy.txt', 'r')

>>> f.readlines()

['Toto\n', 'je maly\n', 'novy\n', 'soubor\n']

>>> f.close()

Operátory

Souhrnný přehled všech operátorů vyskytujících se v
Jythonu obsahuje Tabulka 2-3. Priorita operátorů je
uvedena v klesajícím pořadí.

Tab. 2-3. Operátory a jejich priorita

Operátory

Popis

(…), […], {…}, `…`

Konstruktory pro – tuple/seznam/asociativní
pole, konverze na řetězec

X[i], x[i:j], x.y, x(….)

Indexování, řezy ("slicing"),
volání atributu (členské proměnné) objektu,
operátor volání funkce

-x, ~y, +x

Aritmetická negace, bitový doplněk,
identita

x*y, x/y, x%y

Násobení/opakování, dělení,
modulo/formatovaný výstup

x + y, x – y

Sčítání/spojování, odčítání

x<<y, x>>y

Bitový posun

x & y

Bitový and

x ^ y

Bitový XOR

x | y

Bitový or

<, <=, >=, ==, !=, <>

Porovnávání

is, is not

Test identity

in, not in

Prvek seznamu

not x

Logická negace

x and y

Logický součin

x or y, lambda arglist : expr

Logický součet, anonymní funkce