Python
Z Wikipedie, otevřené encyklopedie
Charakter jazyka: | víceparadigmatický |
---|---|
Objevil se: | 1990 |
Navrhl jej: | Guido van Rossum |
Vývoj realizuje: | Python Software Foundation |
Poslední verze: | 2.5 |
Datum verze: | 19. září 2006 |
Typová kontrola: | silná, dynamická |
Hlavní implementace: | CPython, Jython, IronPython, PyPy (en) |
Dialekty: | -- |
Ovlivněn jazyky: | ABC, Perl, Lisp, Smalltalk, Tcl |
Ovlivnil jazyky: | Ruby, Boo, Groovy |
Operační systém: | různé platformy |
Licence: | Python Software Foundation License |
Website: | www.python.org |
Python je interpretovaný objektově orientovaný programovací jazyk navržený v roce 1990 Guido van Rossumem. Python je vyvíjen jako open source projekt, který zdarma nabízí instalační balíky pro většinu běžných platforem (Unix, Windows, Mac OS); ve většině distribucí systému Linux je Python součástí základní instalace.
Obsah |
[editovat] Vlastnosti
Python je dynamický interpretovaný jazyk. Někdy bývá zařazován mezi takzvané skriptovací jazyky. Jeho možnosti jsou ale větší. Python byl navržen tak, aby umožňoval tvorbu rozsáhlých, plnohodnotných aplikací (včetně grafického uživatelského rozhraní).
Python je hybridní jazyk (nebo také víceparadigmatický), to znamená, že umožňuje při psaní programů používat nejen objektově orientované paradigma, ale i procedurální a v omezené míře i funkcionální, podle toho komu co vyhovuje nebo se pro danou úlohu hodí nejlépe. Python má díky tomu vynikající vyjadřovací schopnosti. Kód programu je ve srovnání s jinými jazyky krátký a dobře čitelný.
K význačným vlastnostem jazyka Python patří jeho jednoduchost z hlediska učení. Bývá dokonce považován za jeden z nejvhodnějších programovacích jazyků pro začátečníky. Tato skutečnost je dána tím, že jedním z jeho silných inspiračních zdrojů byl programovací jazyk ABC, který byl jako jazyk pro výuku a pro použití začátečníky přímo vytvořen. Python ale současně bourá zažitou představu, že jazyk vhodný pro výuku není vhodný pro praxi a naopak. Podstatnou měrou k tomu přispívá čistota a jednoduchost syntaxe, na kterou se při vývoji jazyka hodně dbá.
Význačnou vlastností jazyka Python je produktivnost z hlediska rychlosti psaní programů. Týká se to jak nejjednodušších programů, tak aplikací velmi rozsáhlých. U jednoduchých programů se tato vlastnost projevuje především stručností zápisu. U velkých aplikací je produktivnost podpořena rysy, které se používají při programování ve velkém, jako jsou například přirozená podpora prostorů jmen, používání výjimek, standardně dodávané prostředky pro psaní testů (unit testing) a dalšími. S vysokou produktivností souvisí dostupnost a snadná použitelnost široké škály knihovních modulů, umožňujících snadné řešení úloh z řady oblastí.
Python se snadno vkládá do jiných aplikací (embedding), kde pak slouží jako jejich skriptovací jazyk. Tím lze aplikacím psaným v kompilovaných programovacích jazycích dodávat chybějící pružnost. Jiné aplikace nebo aplikační knihovny mohou naopak implementovat rozhraní, které umožní jejich použití v roli pythonovského modulu. Jinými slovy, pythonovský program je může využívat jako modul dostupný přímo z jazyka Python (tj. extending, viz sekce Spolupráce s jinými aplikacemi).
[editovat] Zen of Python
Vůdčí principy, které BDFL prosazuje při návrhu systému Python, stručně shrnul dlouholetý pythonýr Tim Peters do podoby 20 aforismů, z nichž bylo zapsáno pouze 19:
The Zen of Python, by Tim Peters | Volný překlad |
---|---|
Beautiful is better than ugly. | Krásný je lepší než ošklivý. |
Explicit is better than implicit. | Explicitní je lepší než implicitní. |
Simple is better than complex. | Jednoduchý je lepší než složitý. |
Complex is better than complicated. | Složitý je lepší než komplikovaný. |
Flat is better than nested. | Plochý je lepší než zanořený. |
Sparse is better than dense. | Řídký je lepší než hustý. |
Readability counts. | Na čitelnosti záleží. |
Special cases aren't special enough to break the rules. | Speciální případy nejsou dost speciální, aby ospravedlnily porušení pravidel. |
Although practicality beats purity. | Ačkoliv praktičnost vyhrává nad čistotou. |
Errors should never pass silently. | Chyby by nikdy neměly projít potichu. |
Unless explicitly silenced. | Pokud nejsou záměrně zamlčeny. |
In the face of ambiguity, refuse the temptation to guess. | Pokud se setkáš s nejednoznačností, odolej pokušení odhadovat. |
There should be one—and preferably only one—obvious way to do it. | Měl by existovat jeden — a pokud možno pouze jeden — zřejmý způsob jak to udělat. |
Although that way may not be obvious at first unless you're Dutch. | Ačkoliv tento způsob nemusí být hned zřejmý, pokud nejsi Holanďan. |
Now is better than never. | Teď je lepší než nikdy. |
Although never is often better than right now. | Ačkoliv nikdy je často lepší než právě teď. |
If the implementation is hard to explain, it's a bad idea. | Pokud lze implementaci vysvětlit jen s obtížemi, jde o špatnou myšlenku. |
If the implementation is easy to explain, it may be a good idea. | Pokud lze implementaci vysvětlit snadno, mohla by to být dobrá myšlenka. |
Namespaces are one honking great idea — let's do more of those! | Jmenné prostory jsou jednou z velkých myšlenek — jen víc takových! |
Anglický originál textu se vypíše, pokud v interaktivním režimu uživatel zadá příkaz >>> import this
. Podobným legráckám a nečekaným věcem umístěným do programů se říká velikonoční vajíčko.
[editovat] Související projekty
Mimo jiné je v něm implementován aplikační server Zope, instalátor operačního systému RedHat Linux (Anaconda) nebo většina konfiguračních nástrojů operačního systému RedHat Linux.
[editovat] Spolupráce s jinými programovacími jazyky
[editovat] C a C++
Klasický Python je implementován v jazyce C (označuje se někdy jako CPython). V něm probíhá další vývoj jazyka Python. Verze jazyka Python jsou zveřejňovány jak v podobě zdrojového kódu, tak v podobě přeložených instalačních balíků pro různé cílové platformy.
Dostupnost zdrojového kódu a vlastnosti jazyka C umožňují zabudovat interpret jazyka Python do jiné aplikace psané v jazycích C nebo C++. Takto zabudovaný interpret jazyka Python pak představuje nástroj pro pružné rozšiřování funkčnosti výsledné aplikace zvenčí. Existuje i projekt pro užší spolupráci s C++ nazvaný Boost.Python
Z těchto důvodů — a s přihlédnutím k obecně vysokému výkonu aplikací psaných v jazyce C — je CPython nejpoužívanější implementací jazyka Python.
[editovat] Java
Existuje implementace Pythonu v jazyce Java, která se jmenuje Jython. Kód napsaný v Jythonu běží v JVM Javy a může používat všechny knihovny prostředí Java. V Javě lze naopak používat všechny knihovny napsané v Jythonu.
Nevýhodou Jythonu je, že je několik verzí pozadu za implementací CPython. Například v době vypuštění verze CPython 2.4.3 (březen 2006) byla k dispozici teprve verze Jython 2.1. Řada význačných vlastností jazyka Python se přitom objevuje až od verze 2.2. Při používání Jython z javovských aplikací ale nemusí být otázka nedostupnosti novějších rysů tak palčivá.
[editovat] Prostředí .NET/Mono
Pracuje se na implementaci Pythonu pro prostředí .NET/Mono. Ta je známa pod jménem IronPython.
Za výhody lze považovat to, že se Python tímto stává jedním z jazyků pro platformu .NET. To současně znamená, že jej lze přímo využívat ve všech jazycích platformy .NET. Vzhledem k významu, jaký platformě .NET přikládá firma Microsoft, lze očekávat, že význam implementace IronPython dále poroste. Vzhledem k vlastnostem jazyka Python lze také předpokládat, že se implementace IronPython stane dlouhodobě podporovanou.
Nevýhodou implementace IronPython je zatím její nevyzrálost (verze IronPython 1.0.1 byla vydána 7. října 2006). Negativně může být vnímána i skutečnost, že implementace IronPython je vyvíjena firmou Microsoft a dostupnost zdrojového kódu je svázána s přísnější licencí, než je tomu u implementace CPython.
[editovat] Výkon
Výkon aplikací napsaných v Pythonu je dobrý, protože výkonově kritické knihovny jsou implementovány v jazyce C, s kterým Python výborně spolupracuje. I samotný jazyk je na tom v porovnání s jinými interpretovanými jazyky dobře. Je např. 3 až 5 krát rychlejší než PHP. Pro Python navíc existuje snadno použitelná knihovna Psyco, která transparentně optimalizuje kód Pythonu na výkon. Některé operace jsou pomocí Psyco urychleny až řádově.
[editovat] Spolupráce s jinými aplikacemi
Jak již bylo řečeno, Python se snadno vkládá do jiných aplikací, kde pak slouží jako jejich skriptovací jazyk. Lze ho najít např. v 3D programu Blender, v kancelářském balíku OpenOffice.org, v textovém editoru Vim. Lze jej alternativně použít jako skriptovací jazyk aplikace GIMP, existují pythonovská aplikační rozhraní pro celou řadu dalších projektů — například pro ImageMagick. Varianta Jython (implementace Pythonu v Javě — viz dále) jej umožňuje používat jako skriptovací jazyk všude tam, kde lze používat skripty v Javě — například v editoru jEdit.
[editovat] Příklady
Ukázkový program Hello world vypadá velmi jednoduše:
print "Hello, World!"
Program pro výpočet obsahu kruhu ze zadaného poloměru by mohl vypadat například takto:
# toto je komentář a interpret jej ignoruje
import math # zpřístupní modul s matematickými funkcemi a konstantami (sin, cos, pi atp.)
vstup = raw_input("Zadejte polomer: ") # zobrazí výzvu a načte nějaký řetězec r = float(vstup) # převede řetězec na desetiné číslo S = r**2 * math.pi # umocní r na 2 a vynásobí jej pi print "Výsledek je:", S # zobrazí výsledek
Výpočet faktoriálu v porovnání s jazykem C:
Program v jazyce Python | Odpovídající program v jazyce C |
---|---|
def factorial(x): if x <= 0: return 1 else: return x * factorial(x - 1) |
int factorial(int x) { if (x <= 0) return 1; else return x * factorial(x - 1); } |
[editovat] Charakteristika a použití jazyka
[editovat] Proměnná je pojmenovaným odkazem na objekt
Každá proměnná se chápe jako pojmenovaný odkaz na objekt. Přesněji řečeno, jméno proměnné je svázáno s jinak bezejmenným objektem. Příkaz přiřazení nezajistí okopírování hodnoty navázaného objektu. Provede se pouze svázání nového jména s původním objektem.
a = [1, 2] b = a
Jména a i b jsou nyní svázána se stejným objektem. Pokud objekt může být měněn, pak se změna provedená přes jméno b projeví i při následném přístupu přes jméno a. Příklad – zrušíme první prvek seznamu přes jméno b a zobrazíme obsah seznamu přes jméno a:
del b[0] print a
Zobrazí se
[2]
[editovat] Funkce se uchovává jako objekt
Funkce se chová jako běžný objekt, dokud není zavolána.
def funkce(): print 'Python'
f = funkce p = [1, 2, 'test', f] p[3]()
Lze s ní manipulovat, ukládat do proměnných, polí, objektů. Přesněji řečeno, manipulujeme s odkazem na objekt funkce. S objektem funkce můžeme podle potřeby svázat i nové jméno.
[editovat] Do složených datových struktur se ukládají odkazy
Do složených datových struktur se ukládají odkazy na objekty, nikoliv objekty samotné. Typ objektu není svázán s odkazem. Z toho vyplývá, že například do jednoho seznamu můžeme současně uložit odkazy na objekty libovolného typu:
a = [1, 2, 'pokus', u"UNICODE", ('a tak', u'dále…'), {'4':44, 5:55}]
[editovat] Proměnné není nutné deklarovat
V jiných jazycích se při deklaraci proměnné uvádí souvislost jména proměnné s typem ukládané hodnoty. V jazyce Python je proměnná jen pojmenovaným odkazem na nějaký objekt. Typ objektu je ale vázán na odkazovaný objekt, nikoliv na jméno. Potřeba deklarace proměnné ve významu určení souvisejícího typu dat tedy odpadá.
Existence, či neexistence jména přímo nesouvisí s existencí či neexistencí hodnotového objektu. Význam deklarace proměnné ve smyslu popisu existence související hodnoty tedy rovněž odpadá. Proměnná, jako pojmenovaný odkaz, vzniká v okamžiku, kdy se jméno objeví na levé straně přiřazovacího příkazu. Jméno proměnné může být později svázáno dalším přiřazením s jiným objektem zcela jiného typu.
p = 1 p2 = "" p3 = p
[editovat] Členské proměnné tříd mohou vznikat až za běhu
Mezi běžné praktiky při vytváření objektu patří i založení používaných členských proměnných. Tento obrat se ale v jazyce Python chápe jako užitečná technika, nikoliv jako nutnost. Členské proměnné (čili proměnné uvnitř objektu) mohou vznikat až za běhu.
class pokus: pass #prázdná třída
obj = pokus() obj.field1 = 33 obj.field2 = 'str'
Existují ale techniky, které umožňují prostředky jazyka zamezit možnost dodatečného přidávání členských proměnných.
[editovat] Typy nelze libovolně míchat
Při operacích nad objekty se provádí silná typová kontrola. Narozdíl od kompilovaných jazyků se ale provádí až za běhu aplikace.
[editovat] Ortogonalita operátorů
Při vývoji jazyka se kladl a klade důraz na to, aby operátory nebyly vázány na specifické datové typy (pokud je to možné). Přípustnost použití operátoru pro konkrétní operandy se navíc vyhodnocuje až za běhu. Prakticky to znamená, že například následující funkci, která v těle používá operátor plus, můžeme předat jednak číselné a jednak řetězcové argumenty:
def dohromady(a, b): return a + b
dohromady(2, 3) # vrátí 5 dohromady("ahoj", ' nazdar') # vrátí 'ahoj nazdar'
Nejde jen o zajímavou hříčku. Běžné pythonovské funkce tím získávají vlastnosti, kterými se zabývá generické programování.
[editovat] Externí odkazy
- www.python.org – Domovská stránka projektu (anglicky, některé česky)
- www.py.cz – PyCZ, komunitní český web
- Python vs. Python Psyco – Benchmark
- Boost.Python — C++ knihovna pro spolupráci mezi C++ a Pythonem
Alternativní implementace:
Dokumentace, učebnice:
- Originální tutorial – anglicky
- Originální dokumentace – anglicky
- Učebnice jazyka Python (aneb Létající cirkus) – český překlad
- Létající cirkus, PDF – Seriál na ROOT.CZ, 21 dílů,
- Jak se naučit programovat (překlad Learning to Program) aktuální pracovní verze
- Python – programování zábavou – kvalitní český web o Pythonu, základy, ukázky, praxe
Programovací jazyky | |||
ABAP | Ada | AWK | Assembler | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro
|