InterSystems B.V.
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] : odpovídá první dvojici
value[0]klíč :, atd. ….
hodnota
>>> 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
argumentpočá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
seznam
do 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í |
|
X[i], x[i:j], x.y, x(….) |
Indexování, řezy ("slicing"), |
|
-x, ~y, +x |
Aritmetická negace, bitový doplněk, |
|
x*y, x/y, x%y |
Násobení/opakování, dělení, |
|
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 |
