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í, zamený na snadné pochopení, použití a na vysokou produktivitu programování. Pvodn byl zamýšlen jako druhý jazyk k njakému systémovému. Ale postupem asu se z nj stal výkonný nástroj, a nkteí programátoi oblíbili natolik, že ho používají jako svj 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 vetn XML, skriptování jiných aplikací a podobn. Python je jazyk s bohatými možnostmi, který dokáže být užitený jak profesionálm (jako druhý jazyk pro rychlé a snadné programování menších vcí a prototypování i skriptování vlastních aplikací), tak zaáteníkm, kterým nabízí snadnost nauení i použití a pravdpodobn i pokrytí všech jejich poteb. Jeho nejvtší omezení je, pravdpodobn, nižší výkon. Objektov orientovaný Python je objektov implementovaný (všechno v nm je objekt). Ale podporuje dobe jak objektov orientované tak i strukturované programování. To je užitené, protože objektov orientované programování (OOP) je ponkud abstraktní a s výhodou se uplatní až u vtších projekt. U drobných vcí je to povstný kanón na vrabce a jeho nevýhody pevažují nad výhodami. U drobnjších vcí se lépe uplatní procedurální technika. Python nám tak nabízí vtší flexibilitu v návrhu programu, protože se umí oproti jiným jazykm lépe pizpsobit potebám a osobním preferencím. Díky tomu pokrývá vtší 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 zapouzdení). 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é
rodiovskou 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é pi práci s rozsáhlou sadou datových typ, které mají cosi spoleného, protože potebujeme-li upravit njakou spolenou vlastnost, staí upravit rodiovskou tídu a všichni její potomci tuto úpravu zddí. Návrh objektov orientovaného programu, celý systém hierarchie tíd a podobn je náronjší, než návrh procedurálního programu. Je poteba myslet dopedu a mít s programováním njaké zkušenosti. Proto je lepší se zaít uit programovat na njakém procedurálním jazyku. U Pythonu je výhodou, že v nm mžeme zaít programovat proceduráln a postupn plynule pejít na objektový návrh. Interpretovaný jazyk Jazyky mohou být kompilované nebo interpretované. U kompilovaných jazyk se napsaný kód jednou zkompiluje (peloží) 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á pedepsané instrukce. U interpretovaných jazyk je to složitjší, existují rzná ešení. Obecn se napsaný kód peklá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 pevádí na instrukce procesoru. Peklad do bajtového kódu má adu podob. Mže ho provádt interpret jazyka na pozadí. To znamená, že takový bajtový kód je jen v operaní pamti poítae a kód programu se do bajtového kódu pevádí vždy pi jeho spuštní. To je obvyklé u skriptovacích jazyk. Výhodou je, že s napsaným programem se nemusí nic dlat, lze rovnou snadno spustit. Nevýhodou je, že peklad chvilku trvá (teba peklad OpenOffice.org trvá nkolik hodin), takže toto ešení je použitelné jen u malých prográmk, skript, kde je zpoždní zpsobené pekladem nepatrné. Alternativní ešení, které nás tímto neomezuje je, že se kód interpretovaného jazyka peloží do bajtového kódu pekladaem do souboru, podobn jako je tomu u kompilovaných jazyk. Takový peklad se provádí jen jednou a interpet jazyka dostává k dispozici rovnou bajtový kód, který umí rychle naíst. Tak to dlá teba Java. To nám umožní psát rozsáhlejší programy, ale zas je s tím víc obtžující práce. Pedstavte si, že byste ve Windows museli kompilovat bat soubory ped 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ší. Peklad do bajtového kódu dlá automaticky sám interpret (snadné spouštní). Bajtový kód se ale zárove
uloží i do souboru a pi dalším spuštní programu se znova nepekládá, ale nate se z toho souboru (rychlé spuštní). Dokonce to jde tak daleko, že interpret podle asu souboru pozná, jestli jste neudlali v programu zmnu a když ano, tak ho automaticky peloží do bajtového kódu znovu. Výsledkem ešení Pythonu je, že mžete psát vtší 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í vtších aplikací a u tch vtší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 vbec 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 produktivnjší (programy v nich se píší snadnji 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 piazuje k promnné pi její deklaraci. Promnné jsou známy již pi pekladu zdrojového kódu a díky tomu již v dob pekladu lze odhalit nkterá nesprávná použití promnných a datových typ (chyby v programu). Také to umožuje lepší optimalizaci programu na výkon. Nevýhodou je, že promnná 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 promnných vznikají až za bhu programu a tak nemohou být jejich datové typy kontrolovány pi kompilaci. Mohou ale být kontrolovány za bhu programu. U jazyk s dynamickým typováním mže nést promnná hodnotu rzných datových typ. Také u nich lze za bhu programu datové typy, teba 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 nkterý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 nedlá a špatné použití typ neumí spolehliv detekovat. Python má dynamické a pesto 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. Pesto si ada programátor myslí, že Python se nehodí na psaní rozsáhlých nebo dležitých vcí. Ani známá teze ím dív se na chybu pijde, tím lépe neobstojí, protože u interpretovaných jazyk k prvnímu spuštní programu dochází díve, než ke kompilaci u jazyk kompilovaných a k tomu spouštní dochází astji, protože je to výrazn jednodušší, než spuštní kompilovaného programu. Asi nejúinnjší zpsob 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 pomcek, jak toto testování usnadnit a automatizovat. Dále detekci chyb zlepšuje zmínná silná kontrola typ. Pedcházení chyb napomáhá struná a pehledná syntaxe (uvádí se, že na to samé je v Pythonu poteba napsat cca 5 mén kódu než v jazyce C. Dále Python pedcházení chyb napomáhá syntaktickými drobnostmi. Nap. v podmínce nesmí být piazení, 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 obas zatoulají, píkazy se nemusí ukonovat stedníky a podobn. To všechno jsou chyby, které každý programátor obas udlá, ale ne v Pythonu, tam k nim dojít nemže. To je vše k absenci statického typování, které se asto zveliuje. Syntaxe Tvrci Pythonu považují syntaxi za velmi dležitou a je ve stedu jejich zájmu. Jejich cílem je jednoduchá, pehledná a snadno srozumitelná syntaxe, která poskytuje co nejmén píležitostí k chybám. Prvním znakem syntaxe Pythonu je pímoarost. Jednoduché vci se dlají jednoduše. Napíklad natení obsahu souboru do promnné lze udlat takto snadno: obsah = open("soubor.txt").read() To je celé. Taková pímoarost vede ke krátkému kódu. Krátký kód je pehledný a snadno pochopitelný. Snáz se udržuje a je v nm 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 poteba njak vyznaovat 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 nepehledné. Je to dobré pro peklada, ale ne pro lovka. Má-li se lovk 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 ml lovk strukturu programu vyznaovat jedním zpsobem pro sebe a druhým pro peklada? Nemže se snad peklada pizpsobit lidem? Mže, Python je toho dkazem. Tetím znakem Pythonu je minimalismus. U Pythonu se tento minimalismus projevuje v co nejmenším potu podporovaných konstrukcí pro ízení programu. Poskytuje jednu konstrukci pro podmínné vykonávání vykonávání kódu (if-elifelse), jednu pro opakované vykonávání kódu s koneným potem cykl (for-else) a jednu pro opakované vykonávání kódu s podmínným potem cykl (while). To je minimální, ale dostatená sada konstrukcí pro ízení programu. Komentáe a dokumentaní etzce 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é etzce, které se používají jako komentáe. Je-li takový víceádkový etzec/komentá umístn na zaátek funkce, metody, tídy nebo modulu, tak s ním Python nakládá jako s dokumentaním etzcem.