Programovací jazyk Python [citováno z http://wraith.iglu.cz/python/index.php] Python je jazyk objektov orientovaný, interpretovaný, dynamický a siln typovaný, multiplatformní, s jednoduchou a itelnou syntaxí, zam ený na snadné pochopení, použití a na vysokou produktivitu programování. P vodn byl zamýšlen jako druhý jazyk k n jakému systémovému. Ale postupem asu se z n j stal výkonný nástroj, a n kte í programáto i oblíbili natolik, že ho používají jako sv j hlavní jazyk. O Pythonu se dále tvrdí, že je vhodný pro výuku programování, psaní prototyp aplikací, webových aplikací, aplikací typu klient/server, sí ových aplikací, skript , utilit, systémových program , menších GUI aplikací, práci s textovými dokumenty v etn XML, skriptování jiných aplikací a podobn . Python je jazyk s bohatými možnostmi, který dokáže být užite ný jak profesionál m (jako druhý jazyk pro rychlé a snadné programování menších v cí a prototypování i skriptování vlastních aplikací), tak za áte ník m, kterým nabízí snadnost nau ení i použití a pravd podobn i pokrytí všech jejich pot eb. Jeho nejv tší omezení je, pravd podobn , nižší výkon.
Objektov orientovaný Python je objektov implementovaný (všechno v n m je objekt). Ale podporuje dob e jak objektov orientované tak i strukturované programování. To je užite né, protože objektov
orientované
programování (OOP) je pon kud abstraktní a s výhodou se uplatní až u v tších projekt . U drobných v cí je to pov stný kanón na vrabce a jeho nevýhody p evažují nad výhodami. U drobn jších v cí se lépe uplatní procedurální technika. Python nám tak nabízí v tší flexibilitu v návrhu programu, protože se umí oproti jiným jazyk m lépe p izp sobit pot ebám a osobním preferencím. Díky tomu pokrývá v tší spektrum úloh, na jejichž ešení se hodí. Hlavní rozdíl mezi OOP a procedurálním programováním se dá laicky poposat tak, že v procedurálním programování máme samostatná data, která se zpracovávají samostatnými funkcemi (procedury), jenž vytvá íme a které mají jeden vstup a jeden výstup. V OOP oproti tomu máme objekty, které sdružují data a funkce, které s nimi pracují, v jeden celek - objekt (nazývá se to zapouzd ení). Objekt m že mít adu vstup i výstup a m že si pamatovat i svoji historii. Objekty se vytvá í na základ jakési šablony, které se nazývají t ídy. T ídu je také možno vnímat jako uživatelsky definované komplexní datové typy. Z jedné t ídy je možno odvodit podt ídy, které
rodi ovskou t ídu specializují (nap íklad z t ídy
íslo by mohly vzniknout podt ídy celé
íslo,
desetinné íslo a komplexní íslo). Takto mohou vzniknout rozsáhlé hierarchie t íd. Je to velmi výhodné p i práci s rozsáhlou sadou datových typ , které mají cosi spole ného, protože pot ebujeme-li upravit n jakou spole nou vlastnost, sta í upravit rodi ovskou t ídu a všichni její potomci tuto úpravu zd dí. Návrh objektov orientovaného programu, celý systém hierarchie t íd a podobn je náro n jší, než návrh procedurálního programu. Je pot eba myslet dop edu a mít s programováním n jaké zkušenosti. Proto je lepší se za ít u it programovat na n jakém procedurálním jazyku. U Pythonu je výhodou, že v n m m žeme za ít programovat proceduráln a postupn plynule p ejít na objektový návrh.
Interpretovaný jazyk Jazyky mohou být kompilované nebo interpretované. U kompilovaných jazyk se napsaný kód jednou zkompiluje (p eloží) do instrukcí procesoru (binární kód). Tento binární kód (ve Windows nap . exe soubory) je možno spustit, což znamená, že procesor vykonává p edepsané instrukce. U interpretovaných jazyk je to složit jší, existují r zná ešení. Obecn se napsaný kód p ekládá do tzv. bajtového kódu a tento kód pak provádí interpret jazyka. Interpret jazyka je obvykle kompilovaný program, který bajtový kód p evádí na instrukce procesoru. P eklad do bajtového kódu má adu podob. M že ho provád t interpret jazyka na pozadí. To znamená, že takový bajtový kód je jen v opera ní pam ti po íta e a kód programu se do bajtového kódu p evádí vždy p i jeho spušt ní. To je obvyklé u skriptovacích jazyk . Výhodou je, že s napsaným programem se nemusí nic d lat, lze rovnou snadno spustit. Nevýhodou je, že p eklad chvilku trvá (t eba p eklad OpenOffice.org trvá n kolik hodin), takže toto ešení je použitelné jen u malých prográmk , skript , kde je zpožd ní zp sobené p ekladem nepatrné. Alternativní ešení, které nás tímto neomezuje je, že se kód interpretovaného jazyka p eloží do bajtového kódu p eklada em do souboru, podobn jako je tomu u kompilovaných jazyk . Takový p eklad se provádí jen jednou a interpet jazyka dostává k dispozici rovnou bajtový kód, který umí rychle na íst. Tak to d lá t eba Java. To nám umožní psát rozsáhlejší programy, ale zas je s tím víc obt žující práce. P edstavte si, že byste ve Windows museli kompilovat bat soubory p ed jejich použitím. Python tuto záležitost origináln
eší tak, že oba p ístupy kombinuje a bere si z nich to lepší. P eklad
do bajtového kódu d lá automaticky sám interpret (snadné spoušt ní). Bajtový kód se ale zárove
uloží i do souboru a p i dalším spušt ní programu se znova nep ekládá, ale na te se z toho souboru (rychlé spušt ní). Dokonce to jde tak daleko, že interpret podle asu souboru pozná, jestli jste neud lali v programu zm nu a když ano, tak ho automaticky p eloží do bajtového kódu znovu. Výsledkem ešení Pythonu je, že m žete psát v tší programy a zárove je to programování tak snadné, jako u skriptovacích jazyk . Python tak lze snadno použít jak na psaní skript , tak na psaní v tších aplikací a u t ch v tších aplikací navíc díky snadnému použití (absenci kompilace) zvyšuje produktivitu programování. Další obecnou vlastností interpretovaných program
je, že jsou více nebo mén
pomalejší než
kompilované programy. Takže tu vyvstává otázka, pro se v bec interpretovanými jazyky zabývat. Odpov
je jednoduchá, ten rozdíl výkonu nemusí být prakticky ani pozorovatelný a interpretované
jazyky to vyvažují tím, že jsou produktivn jší (programy v nich se píší snadn ji a rychleji). Nap . webovým aplikacím dominují programy psané v interpretovaných jazycích, jako je PHP nebo Java.
Datové typy a typování Jazyk m že mít dynamické nebo statické typování. U statického typování se datový typ p i azuje k prom nné p i její deklaraci. Prom nné jsou známy již p i p ekladu zdrojového kódu a díky tomu již v dob p ekladu lze odhalit n která nesprávná použití prom nných a datových typ (chyby v programu). Také to umož uje lepší optimalizaci programu na výkon. Nevýhodou je, že prom nná m že nést jen hodnoty jednoho datového typu a obejít toto omezení komplikuje psaní programu. U dynamického typování je datový typ sdružen s hodnotou. Hodnoty prom nných vznikají až za b hu programu a tak nemohou být jejich datové typy kontrolovány p i kompilaci. Mohou ale být kontrolovány za b hu programu. U jazyk s dynamickým typováním m že nést prom nná hodnotu r zných datových typ . Také u nich lze za b hu programu datové typy, t eba t ídy, modifikovat. To zlepšuje flexibilitu a snadnost programování, ale zt žuje optimalizaci programu na výkon. Proto jazyky s dynamickým typováním jsou obecn pomalejší. V n kterých situacích až ádov . Jazyk dále m že mít silné nebo slabé typování. Siln typovaný jazyk provádí kontrolu typ
a
spolehliv zjištuje jejich chybné použití (chyby v programu). Slab typovaný jazyk to ned lá a špatné použití typ neumí spolehliv detekovat. Python má dynamické a p esto silné typování:
print 'Výsledek =', 1 + "1"
Výsledek = TypeError: unsupported operand type(s) for +: 'int' and 'str' Nelze nap . s ítat datový typ int a str, tedy íslo a text. P esto si ada programátor myslí, že Python se nehodí na psaní rozsáhlých nebo d ležitých v cí. Ani známá teze ím d ív se na chybu p ijde, tím lépe neobstojí, protože u interpretovaných jazyk k prvnímu spušt ní programu dochází d íve, než ke kompilaci u jazyk
kompilovaných a k tomu
spoušt ní dochází ast ji, protože je to výrazn jednodušší, než spušt ní kompilovaného programu. Asi nejú inn jší zp sob jak psát robustní programy je testování kódu, testování kódu a testování kódu. A to v jakémkoli jazyce. Python nabízí adu pom cek, jak toto testování usnadnit a automatizovat. Dále detekci chyb zlepšuje zmín ná silná kontrola typ . P edcházení chyb napomáhá stru ná a p ehledná syntaxe (uvádí se, že na to samé je v Pythonu pot eba napsat cca 5 × mén kódu než v jazyce C. Dále Python p edcházení chyb napomáhá syntaktickými drobnostmi. Nap . v podmínce nesmí být p i azení, takže v Pythonu nem že dojít k k asté a záludné chyb , kdy místo == napíšete omylem jen =. Nebo se k vymezování blok nepoužívají závorky, které se ob as zatoulají, p íkazy se nemusí ukon ovat st edníky a podobn . To všechno jsou chyby, které každý programátor ob as ud lá, ale ne v Pythonu, tam k nim dojít nem že. To je vše k absenci statického typování, které se asto zveli uje.
Syntaxe Tv rci Pythonu považují syntaxi za velmi d ležitou a je ve st edu jejich zájmu. Jejich cílem je jednoduchá, p ehledná a snadno srozumitelná syntaxe, která poskytuje co nejmén p íležitostí k chybám. Prvním znakem syntaxe Pythonu je p ímo arost. Jednoduché v ci se d lají jednoduše. Nap íklad na tení obsahu souboru do prom nné lze ud lat takto snadno:
obsah = open("soubor.txt").read() To je celé. Taková p ímo arost vede ke krátkému kódu. Krátký kód je p ehledný a snadno pochopitelný. Snáz se udržuje a je v n m mén chyb. Druhým znakem syntaxe Pythonu je odsazování.
Kdykoli pohlédnete na kód Pythonu, uvidíte, že je hezky odsazený. To proto, že odsazování kódu dle jeho struktury je v Pythonu sou ástí syntaxe, je povinné. V každém programovacím jazyce je pot eba n jak vyzna ovat jeho srukturu, jeho bloky p íkaz .
asto se k tomu používají složené závorky (C,
Java, PHP) nebo klí ová slova (Pascal, VB). Python používá odsazování. Jde o to, že jak závorky tak klí ová slova jsou nep ehledné. Je to dobré pro p eklada , ale ne pro lov ka. Má-li se lov k ve svém kódu vyznat, musí odsazovat, samotné závorky mu nepomohou. Odsazování kódu pat í mezi dobrou praxi u všech jazyk . Pro by m l lov k strukturu programu vyzna ovat jedním zp sobem pro sebe a druhým pro p eklada ? Nem že se snad p eklada p izp sobit lidem? M že, Python je toho d kazem. T etím znakem Pythonu je minimalismus. U Pythonu se tento minimalismus projevuje v co nejmenším po tu podporovaných konstrukcí pro ízení programu. Poskytuje jednu konstrukci pro podmín né vykonávání vykonávání kódu (if-elifelse), jednu pro opakované vykonávání kódu s kone ným po tem cykl
(for-else) a jednu pro
opakované vykonávání kódu s podmín ným po tem cykl (while). To je minimální, ale dostate ná sada konstrukcí pro ízení programu.
Komentá e a dokumenta ní et zce Python zná vcelku b žné jedno ádkové komentá e, které za ínají znakem # a platí až do konce ádku. Více ádkové komentá e nezná, ale umí více ádkové textové
et zce, které se používají jako
komentá e. Je-li takový více ádkový et zec/komentá umíst n na za átek funkce, metody, t ídy nebo modulu, tak s ním Python nakládá jako s dokumenta ním et zcem.