Python (anglická výslovnost [ˈpaiθən]) je vysokoúrovňový, interpretovaný programovací jazyk, který v roce 1991 navrhl Guido van Rossum. Nabízí dynamickou kontrolu datových typů a podporuje různá programovací paradigmata, včetně objektově orientovaného, imperativního nebo funkcionálního. Jako instalátor balíčků slouží např. pip, který je přítomný ve většině instalacích Pythonu. Tyto balíčky lze získat např. z repozitáře PyPI (Python Package Index). V roce 2023 se jednalo o třetí nejpoužívanější programovací jazyk.

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, MS Windows, macOS, Android); ve většině distribucí systému GNU/Linux je Python součástí základní instalace.

Nachází využití zejména pro vývoj webových aplikací (framework Django), datovou analýzu (frameworky Pandas nebo scikit-learn) a strojové učení (Pytorch, TensorFlow).

Python byl pojmenován podle komediální skupiny Monty Python, kteří pomocí svých skečů ovlivnili internetovou subkulturu například slovem spam.

Využití

Python nabízí široké spektrum využití, například:

Vývoj webových aplikací – díky frameworkům, jako je např. Django a Flask, umožňuje vývoj robustních webových aplikací. Data Science – k tomuto účelu slouží např. knihovny Pandas, NumPy a Matplotlib Umělá inteligence – pod umělou inteligenci patří i strojové učení, neuronové sítě a hluboké učení. K tomuto účelu se využívají např. knihovny TensorFlow, PyTorch a scikit-learn, které usnadňují vytváření a trénování modelů. Také je k dispozici modul openai, který zpřístupňuje API k ChatGPT. Automatizace – Python lze využít pro automatizaci opakujících se úkolů a procesů. Vývoj počítačových aplikací – S knihovnami pro tvorbu grafického uživatelského rozhraní PyQt, PyGObject a Tkinter lze vytvářet aplikace pro počítač. Vývoj her – Knihovny jako Pygame, PyOpenGL nebo Panda3D umožňují vytváření her. Sítě a vývoj protokolů – Python umožňuje vývoj síťových aplikací, včetně klientů a serverů pro různé síťové protokoly. Vědecký výpočet – Knihovny jako SciPy a NumPy rozšiřují možnosti Pythonu v oblasti vědeckých výpočtů. Mikrokontroléry – Díky MicroPythonu je možné programovat mikrokontrolér, malý počítač, který je integrovaný v jednom čipu. Edukace – Python je používán jako první programovací jazyk pro výuku programování, např. knihovna Pygame Zero je designovaná s ohledem na vzdělávání mladých vývojářů. Také existuje jednoduché vývojové prostředí Thonny, které je zaměřeno na začátečníky.

Python má rozsáhlou komunitu, která přispívá k velkému množství otevřených zdrojů, projektů a knihoven, jež usnadňují vývoj v těchto i dalších oblastech. Jejich centrum je pypi.org (Python Package Index), které hostuje moduly Pythonu. Ty je možné z pypi.org snadno instalovat pomocí správce balíčků pip, jenž je standardní součástí instalace pythonu. Pypi.org v tuto chvíli hlásí přes půl milionu hostovaných balíčků.

Historie Postupem času vznikly tři nekompatibilní major verze, Python (1), Python 2 a Python 3.

Python 1 se už nepoužívá. Python 0.9.0 byl vydán v roce 1991, Python 1.0 v roce 1994 a poslední verze 1.6.1 vyšla v roce 2000. Python 2 je ukončen, ale stále se s ním lze setkat a je stále k dispozici v linuxových distribucích. Verze 2.0 byla vydána v roce 2000, poslední verze 2.7.18 byla vydána 20. dubna 2020. Od 1. ledna 2020 je dle PEP 373 oficiálně nepodporován. V podobě 2.7.18 byla druhá řada Pythonu zmrazena a nadále se nevyvíjí. PEP 404 uvádí, že nevznikne verze 2.8. Souběh řady 2 a 3. Python 2 a Python 3 byly mnoho let vyvíjeny paralelně. Do Pythonu 2 byly přeneseny některé nové vlastností z raných verzí Pythonu 3. Snahou bylo Python 2 a Python 3 k sobě co nejvíce přiblížit, aby byl usnadněn přechod řady existujících projektů z Pythonu 2 na Python 3. Naplánovaný termín ukončení podpory Pythonu 2 se opakovaně oddaloval. Verze 3.0 byla vydána téměř současně (o dva měsíce později) s verzí 2.6 v roce 2008. Python 3 je aktivní řada. Řada 3 opravuje chybná a překonaná designová rozhodnutí, viz kap. Rozdíly mezi Pythonem 2 a 3.

Python 3 se i nadále vyvíjí. Pravidelně, jednou ročně v říjnu, vychází nová verze. Poslední verze jsou: + Verze Vydána Konec podpory Novinky 3.8 2019-10-14 2024-10 Assignment Expression 3.9 2020-10-05 2025-10 Union operátor pro slovník, removeprefix() a removesuffix() u str 3.10 2021-10-04 2026-10 3.11 2022-10-24 2027-10 Exception Groups, BaseException dostala metodu add_note(), Error Locations, tomllib modul, rychlost zvýšena o 10 až 60 %. 3.12 2023-10-02 2028-10 vylepšení f-stringů, např. v expressions se nyní mohou nacházet escape sekvence (třeba \n nebo ikona {"\N{BLACK HEART SUIT}"}.3.132024-10-072029-10vylepšení interaktivního režimu, experimentální podpora vícevláknového vyhodnocování, JIT, oficiální základní podpora Androidu a iOS3.142025-10-072030-10 t-stringy (literáry šablon), subinterprety (možnost běhu více interpretů v rámci jednoho procesu), odložené vyhodnocování anotací, zvýrazněná syntaxe v REPL

Vlastnosti náhled Typování Python používá silný dynamický typový systém. Silný typový systém zaručuje, že se typy nemohou nečekaně měnit, je zapotřebí je explicitně převést. Dynamický typový systém, na rozdíl od statického, nepřiřazuje proměnné typ, takže se může měnit za chodu programu. Toho je docíleno tím, že v Pythonu je vše objekt a proměnná je jen ukazatel na tento objekt. Informaci o svém datovém typu si udržuje objekt sám a proměnná se nezabývá jeho paměťovými nároky a ty se nedeklarují předem. Jakákoliv proměnná může ukazovat na jakýkoliv objekt.

Dynamické typové systémy mají oproti statickým systémům výhody větší flexibility a snazšího psaní kódu, ale platí za to horší optimalizovatelností a rychlostí výsledného programu. Jako další nevýhoda bývá uváděna horší možnost kontroly programu vůči chybám před spuštěním. Python ale umožňuje anotaci datových typů, takže je možné využít i statické analyzátory kódu, jako např. MyPy. K optimalizaci rychlosti běhu programu to ale využitelné není.

V Pythonu nedochází k automatickému přetypování hodnot. To ve skutečnosti nejde vůbec, typ je napevno a navždy svázán s hodnotou a při tzv. přetypování dojde k vytvoření nového objektu. Výjimečně jsou podporovány interakce mezi různými datovými typy, ale typicky to vyvolává výjimku. Mezi takové výjimečné interakce patří násobení stringu číslem, které provádí zřetězení stringu. Tedy výraz 2 * 'abc' vytvoří nový objekt 'abcabc'. Ale pokus o sečtení čísla a stringu, tedy výraz 2 + 'abc' už vede k vyvolání výjimky.

Paradigma Python je hybridní (multiparadigmatický) jazyk, což znamená, že umožňuje při psaní programů používat různá programovací paradigma a kombinovat je. Primárně je Python objektově orientovaný a vše je v něm implementováno jako objekt, hodnoty, kontejnery, funkce i třídy. Python ale umožňuje i jednoduché procedurální programování, a v omezené míře i funkcionální programování.

Produktivita Významnou vlastností skriptovacích jazyků je vysoká produktivita psaní programů za cenu nižšího výkonu programu a Python není výjimkou. Vyšší produktivita psaní programu se týká malých programů i 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 psaní rozsáhlých programů, jako jsou například přirozená podpora jmenných prostorů, používání modulů, tříd a výjimek, standardně dodávané prostředky pro psaní testů (unit testing), dokumentační řetězce (neplést s komentáři) a dalšími. Vysoké produktivitě napomáhá již zmíněná rozsáhlost a snadná dostupnost škály knihovních modulů, které umožňujících snadné řešení úloh z řady oblastí.

Embedding a extending Python je uzpůsoben k vkládání do jiných aplikací (embedding). Embedding umožňuje aplikace skriptovat v jazyce Python. Ten má přístup jak k API takové aplikace tak ke svému nepřebernému množství modulů, třeba AI. Takto lze aplikacím psaným v kompilovaných programovacích jazycích dodávat chybějící pružnost nebo pro ně snadno psát pluginy či v nich automatizovat jejich činnost.

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 (tzv. extending).

Příklady aplikací s podporou skriptování v Pythonu

Vim – Textový editor. Sublime Text – Textový editor. Visual Studio Code – IDE. Microsoft Office – Automatizace a rozšíření funkcí v Excelu. LibreOffice – Kancelářský balík s podporou makro skriptů v Pythonu. Scribus – DTP (sazba dokumentů) Blender – 3D modelování a animace. GIMP – Bitmapový editor Inkscape – Vektorový SVG editor Krita – Kreslící program Autodesk Maya – 3D modelování, animace, vizuální efekty. Natron – Tvorba vizuálních efektů FreeCAD – Parametrický 3D modelář QGIS – Systém geografických informací (GIS). Orange – Data mining, machine learning a vizualizace dat Bluefish – editor zdrojového kódu

Bezpečnost

Python není vytvářen a koncipován jako bezpečný jazyk. Ačkoliv tedy dochází k pravidelnému napravování bezpečnostních rizik, vědomě má tento programovací jazyk řadu prvků, které mohou být nebezpečné při nevhodném použití nebo s nevhodným účelem.

Na rozdíl od například JavaScriptu, který je běžnou součástí webových stránek a neočekává se tak, že spouštěný kód budou uživatelé ověřovat, není Python odstíněn od operačního systému. Standardně nemá tento jazyk bezpečný sandbox, a tak může být spouštěný kód zneužit k napadení počítače. Vzhledem k rozsáhlosti a komplexitě Pythonu je vektorů zranitelnosti mnoho, mezi hlavní však patří následující:

Externí knihovny nainstalované do Pythonu. Každá knihovna představuje cizí program a ačkoliv se veřejná úložiště (například PyPI) bezpečnost snaží řešit, nezaručují ji na úrovni škodlivého kódu ani nechtěných zranitelností. I z tohoto důvodu je preferované využívání známých knihoven – například numpy s miliony stažení – neboť jsou pod vysokou veřejnou kontrolou. Přepsání cest ke knihovnám. Python ke knihovnám na disku přistupuje dynamicky a neimplementuje žádné digitální podpisy knihoven, bytového kódu či podobné mechanismy. To znamená, že po získání přístupu k disku či nastavení systému (např. PATH cestě) je snadné změnit kód, který se spouští. Neúmyslné spuštění cizího kódu (injekce). Funkce eval() jakýkoliv text spouští jako kód Pythonu, podobné riziko hrozí například i při funkci input() nebo při použití modulu Pickle, který je určen k serializaci a následnému načítání dat. Ve vyhodnocovaných datech se ovšem může vyskytnout škodlivý kód, a tak se zranitelností stává vlastní program. Spoléhání na náhodnost v bezpečnostních funkcích. S výjimkou funkce random.SystemRandom() neposkytuje modul random skutečně náhodné výsledky, které jsou vhodné například pro šifrování nebo podobné aplikace.

Python a jeho ekosystém je tak rozsáhlý, že nelze zabezpečit, aby byl bezchybný. V roce 2017 došlo k bezpečnostním zkouškám několika populárních jazyků včetně Pythonu a u každého byly zjištěny nějaké zranitelnosti. U Pythonu bylo např. zjištěno, že obsahuje nedokumentované funkce a lokální proměnné, které mohou být zneužity pro spuštění příkazu v operačním systému.

Syntaxe