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íč : 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] :
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čátek
bude
interpretována, žeoffset
bude
počítán vůči počátku souboru. Je-li hodnota
parametrupočátek == 1
, jeoffset
počítán relativně vůči stávající
pozici. Propočátek == 2
seoffset
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 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 |