Datový objekt [citováno z http://wraith.iglu.cz/python/index.php] Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu. Identita Identita datového objektu je jedinený a nemnný identifikátor. To jest každý datový objekt má svj vlastní a žádné dva objekty ho nemají shodný. Hodnota identifikátoru nelze zmnit. V souasné dob je implementován jako adresa objektu v pamti. Identifikátor objektu lze zjistit pomocí funkce id(). >>> print id(10) 159591748 Identifikátor datového objektu pedstavujícího íslo s hodnotou 10 je 159591748. Na datové objekty mohou vést odkazy, kterým íkáme promnné. Potebujeme-li zjistit, zda dv rzné promnné se odkazují na ten samý objekt, mžeme porovnat identifikátory objektu. >>> print id(10) == id(10) True >>> print id(10) == id(20) False To samé lze udlat pomocí operátoru is, který pesn k tomuto úelu slouží: >>> print 10 is 10 True >>> print 10 is 20 False Zdrazuji, že tímto zjišujeme, zda se jedná o jeden a ten samý datový objekt (v pamti poítae), ne jestli mají stejnou hodnotu. Na jejich hodnot nezáleží. Datový typ Datový typ je rovnž nemnitelný, ale není jedinený. Mžeme mít v pamti spoustu datových objekt stejného datového typu. Datový typ specifikuje o jaký druh dat se pesn jedná. To jest jakých hodnot mže datový objekt nabývat a jaké podporuje operace.
Datový typ objektu lze zjistit funkcí type(). >>> print type(10) <type 'int'> >>> print type("10") <type 'str'> Datový typ datového objektu íslo s hodnotou 10 je int. Datový typ etzce s hodnotou 10 je str. Hodnota Hodnota datového objektu jsou vlastní data objektu. Hodnoty jsou úzce svázány s datovým typem, který je obecn popisuje. Hodnota datového typu mže být (v závislosti na datovém typu) mnitelná i nemnitelná. Nemnitelné jsou nap. ísla, etzce a vbec základní datové entity. Mnitelné nap. seznamy a slovníky. Nkteré datové objekty, které nazýváme kontejnery, místo vlastních hodnot obsahují odkazy na jiné datové objekty. To jsou napíklad n-tice, seznamy nebo slovníky. Kontejnery mohou být mnitelné (seznam, slovník) i nemnitelné (n-tice). Vznik a zánik datových objekt Datové objekty vznikají automaticky pi práci s daty. Data mohou být uvedena ve form literál pímo ve zdrojovém kódu programu, nebo je mžeme bhem chodu programu naítat ze souboru, ze sít, mže je zadávat uživatel pomocí klávesnice a podobn. Z takto získaných dat poté mžeme v programu vytváet nová. Cokoli s ím pracujeme se automaticky pevádí na datové objekty, které jsou umístny v pamti poítae. Když datové objekty už nejsou poteba, tak stejn automaticky zanikají. Tj. jsou odstranny (vymazány) z pamti poítae. To že datové objekty již nejsou poteba pozná interpret Pythonu podle toho, že se na n neodkazují žádné promnné nebo jiné datové objekty. Python rozpozná i stav, kdy se dva datové objekty odkazují navzájem na sebe, ale na n jako skupinu se již nic neodkazuje. Automatické odstraování datových objekt z pamti má na starost garbage collector. Runí odstranní datového objektu z pamti (na píkaz programátora) není možné. Programátor mže pouze ovlivovat chování garbage collectoru. To jest práce s pamtí poítae je pln v kompetenci Pythonu. Garbage collector mají napíklad i jazyky Java nebo C#, pímou správu pamti napíklad jazyky C nebo C++. Datový typ
ísel se obvykle rozlišuje vícero druh. V Pythonu je nap. celé, dlouhé, desetinné a komplexní íslo. Textový etzec pedstavuje obyejný text. Python má dva druhy textových etzc. Obyejný, kde každý znak zabírá jeden bajt (max. 256 variant znak) a moderní Unicode, který pokrývá všechny možné znaky. Spousta asto užívaných datových typ má své literály: literál datový typ Popis alternativní zápis 0 int celé íslo s hodnotou 0 0.0 float íslo s plovoucí árkou a hodnotou 0 float(0) 0L long dlouhé íso s hodnotou 0 long(0) 0j complex komplexní íslo s hodnotou 0 complex(0, 0) "0" str textový etzec se znakem 0 Jak je vidt, datové typy se u literárního zápisu rozlišují pomocí rzných znaek. Desetinná teka je vcelku pirozená a intuitivní, u jiných si to musíme pamatovat. Je nutno si uvdomit, že ty znaky nejsou souástí hodnoty, jen urují její datový typ. Napíklad u etzce jsou ty uvozovky jen vnjší obal, aby Python poznal, kde etzec zaíná a kde koní když te program. Nejlépe to bude pochopitelné na píkladu. Píkaz: >>> print 0, "0", 0L, 0.0, 0j 0 0 0 0.0 0j Jak je vidt, píkaz print klidn vypisuje nekteré hodnoty bez literárních znaek, výjimkou je íslo s plovoucí árkou. ísla a etzce jsou rzné datové typy, jsou rzn uloženy v pamti, mají rzné vlastnosti a Python s nimi rzn zachází. Nejlépe to osvtlí další ukázka: >>> print 10 + 10 20 >>> print "10" + "10" 1010
To byla ukázka rzného zacházení s rznými datovými typy. Hlavní rozdíl mezi íslem a etzcem je, jak jsou tyto data uložena v pamti poítae. Ve zkratce, íslo 10 je v pamti uloženo v binární podob. Tedy jako kombinace jedniek a nul, která v dvojkové soustav pedstavuje hodnotu 10. Oproti tomu etzec "10" je v pamti uložen jako posloupnost znak "1" a "0". Pitom znak "1" je nco jiného než íslo 1. Znak "1" je nap. íslo 49. Poítae totiž umí pracovat jenom s ísly. Znaky jsou proto v poítai ada oíslovaných obrázk (i obrázek jsou ísla, ísla souadnic a ísla barev). Vztah mezi obrázky znak a jejich ísly, tj. k jakému íslu je piazen který obrázek, je stanoveno ASCII tabulkou, která definuje že obrázek znaku 1 má íslo 49. Python je jazyk vyšší úrovn (high level language). To znamená, že programátorm poskytuje vtší odstínní od hardware, tj. zjednodušenné základní typy, pipravené obecné abstraktní typy a protože vše, vetn funkcí a tíd, je v nm objekt, tak i vyšší datové typy. Základní datové typy které Python poskytuje: název int float popis Celé íslo se znaménkem. Minimáln 32 bit, na 64 bit. procesorech mže být vtší. Desetinné íslo s dvojitou pesností. Jednoduchá pesnost v Pythonu není podporována. Abstraktní datové typy: název NoneType bool long complex str popis speciální typ s jedinou hodnotou None speciální typ s hodnotami True a False celé íslo neomezené velikosti komplexní íslo text v 8. bitovém kódování
unicode list tuple dict file text v kódování unicode seznam (pole s metodami pro práci s jeho prvky) nemodifikovatelná varianta seznamu slovník (datový typ známý i pod názvy hash, asociativní pole) otevený soubor