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íč : hodnotapro 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čátekbude interpretována, žeoffsetbude počítán vůči počátku souboru. Je-li hodnota parametrupočátek == 1, jeoffsetpočítán relativně vůči stávající pozici. Propočátek == 2seoffsetpočí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ězecdo souboru. Návratová hodnota jeNone.
writelines(seznam)
Zapíše řetězce ze seznamu
seznamdo souboru. Do souboru nejsou automaticky vkládány žádné znaky‘\n', aby byla funkce komplementární kreadlines().
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 |
www.amaio.com