Datový objekt [citováno z http://wraith.iglu.cz/python/index.php] Každý datový objekt Pythonu má minimáln t i vlastnosti. Identitu, datový typ a hodnotu.
Identita Identita datového objektu je jedine ný a nem nný identifikátor. To jest každý datový objekt má sv j vlastní a žádné dva objekty ho nemají shodný. Hodnota identifikátoru nelze zm nit. V sou asné dob je implementován jako adresa objektu v pam ti. Identifikátor objektu lze zjistit pomocí funkce id().
>>> print id(10) 159591748 Identifikátor datového objektu p edstavujícího íslo s hodnotou 10 je 159591748. Na datové objekty mohou vést odkazy, kterým íkáme prom nné. Pot ebujeme-li zjistit, zda dv r zné prom nné 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 ud lat pomocí operátoru is, který p esn k tomuto ú elu slouží:
>>> print 10 is 10 True >>> print 10 is 20 False Zd raz uji, že tímto zjiš ujeme, zda se jedná o jeden a ten samý datový objekt (v pam ti po íta e), ne jestli mají stejnou hodnotu. Na jejich hodnot nezáleží.
Datový typ Datový typ je rovn ž nem nitelný, ale není jedine ný. M žeme mít v pam ti spoustu datových objekt stejného datového typu. Datový typ specifikuje o jaký druh dat se p esn 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)
>>> print type("10") Datový typ datového objektu íslo s hodnotou 10 je int. Datový typ et zce 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) m nitelná i nem nitelná. Nem nitelné jsou nap . ísla, et zce a v bec základní datové entity. M nitelné nap . seznamy a slovníky. N které 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 m nitelné (seznam, slovník) i nem nitelné (n-tice).
Vznik a zánik datových objekt Datové objekty vznikají automaticky p i 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 b hem 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 p evádí na datové objekty, které jsou umíst ny v pam ti po íta e. Když datové objekty už nejsou pot eba, tak stejn
automaticky zanikají. Tj. jsou odstran ny
(vymazány) z pam ti po íta e. To že datové objekty již nejsou pot eba pozná interpret Pythonu podle toho, že se na n neodkazují žádné prom nné 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é odstra ování datových objekt z pam ti má na starost garbage collector. Ru ní odstran ní datového objektu z pam ti (na p íkaz programátora) není možné. Programátor m že pouze ovliv ovat chování garbage collectoru. To jest práce s pam tí po íta e je pln v kompetenci Pythonu. Garbage collector mají nap íklad i jazyky Java nebo C#, p ímou správu pam ti 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ý et zec p edstavuje oby ejný text. Python má dva druhy textových et zc . Oby ejný, 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
0.0
float
0L
long
dlouhé íso s hodnotou 0
long(0)
0j
complex
komplexní íslo s hodnotou 0
complex(0, 0)
"0"
str
textový et zec se znakem 0
celé íslo s hodnotou 0 íslo s plovoucí árkou a hodnotou 0
float(0)
Jak je vid t, datové typy se u literárního zápisu rozlišují pomocí r zných zna ek. Desetinná te ka je vcelku p irozená a intuitivní, u jiných si to musíme pamatovat. Je nutno si uv domit, že ty zna ky nejsou sou ástí hodnoty, jen ur ují její datový typ. Nap íklad u et zce jsou ty uvozovky jen vn jší obal, aby Python poznal, kde et zec 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 vid t, p íkaz print klidn vypisuje nekteré hodnoty bez literárních zna ek, výjimkou je íslo s plovoucí árkou. ísla a et zce jsou r zné datové typy, jsou r zn uloženy v pam ti, mají r zné vlastnosti a Python s nimi r zn zachází. Nejlépe to osv tlí další ukázka:
>>> print 10 + 10 20 >>> print "10" + "10" 1010
To byla ukázka r zného zacházení s r znými datovými typy. Hlavní rozdíl mezi íslem a et zcem je, jak jsou tyto data uložena v pam ti po íta e. Ve zkratce, íslo 10 je v pam ti uloženo v binární podob . Tedy jako kombinace jedni ek a nul, která v dvojkové soustav p edstavuje hodnotu 10. Oproti tomu et zec "10" je v pam ti uložen jako posloupnost znak "1" a "0". P itom znak "1" je n co jiného než íslo 1. Znak "1" je nap . íslo 49. Po íta e totiž umí pracovat jenom s ísly. Znaky jsou proto v po íta i ada o íslovaných obrázk (i obrázek jsou ísla, ísla sou adnic a ísla barev). Vztah mezi obrázky znak a jejich ísly, tj. k jakému íslu je p i azen 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átor m poskytuje v tší odstín ní od hardware, tj. zjednodušenné základní typy, p ipravené obecné abstraktní typy a protože vše, v etn funkcí a t íd, je v n m objekt, tak i vyšší datové typy. Základní datové typy které Python poskytuje:
název
popis
int
Celé íslo se znaménkem. Minimáln 32 bit , na 64 bit. procesorech m že být v tší.
float
Desetinné íslo s dvojitou p esností. Jednoduchá p esnost v Pythonu není podporována.
Abstraktní datové typy:
název
popis
NoneType
speciální typ s jedinou hodnotou None
bool
speciální typ s hodnotami True a False
long
celé íslo neomezené velikosti
complex
komplexní íslo
str
text v 8. bitovém kódování
unicode
text v kódování unicode
list
seznam (pole s metodami pro práci s jeho prvky)
tuple
nemodifikovatelná varianta seznamu
dict
slovník (datový typ známý i pod názvy hash, asociativní pole)
file
otev ený soubor