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