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ňujeAPI kChatGPT.
Automatizace – Python lze využít pro automatizaci opakujících se úkolů a procesů.
Vývojher – Knihovny jakoPygame, 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ů aserverů pro různé síťové protokoly.
Vědecký výpočet – Knihovny jako SciPy aNumPy rozšiřují možnosti Pythonu v oblasti vědeckých výpočtů.
Mikrokontroléry – Díky MicroPythonu je možné programovatmikrokontrolér, malý počítač, který je integrovaný v jednom čipu.[8]
Edukace – Python je používán jako první programovací jazyk pro výuku programování, např. knihovnaPygame 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ů.
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.13
2024-10-07
2029-10
vylepšení interaktivního režimu, experimentální podpora vícevláknového vyhodnocování,JIT, oficiální základní podporaAndroidu aiOS
Python používá silný dynamický typový systém.[9] 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.[10] 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.
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 Pythonobjektově 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 ifunkcionální programování.
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řipsaní rozsáhlých programů, jako jsou například přirozená podporajmenných prostorů, používání modulů, tříd avý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í.
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
Podrobnější zdůvodnění najdete vdiskusi. Prosíme, neodstraňujte tuto zprávu, dokud nebudou pochybnosti vyřešeny.
Pro vkladatele šablony: Na diskusní stránce zdůvodněte vložení šablony. Odůvodnění zpochybnění:Porovnání JS a Pythonu je napsáno pochybně. Node.js by měl být stejnou bezpečnost jako JS.
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 odoperač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,[11] 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říkladnumpy 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). Funkceeval() jakýkoliv text spouští jako kód Pythonu, podobné riziko hrozí například i při funkciinput() 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 funkcerandom.SystemRandom() neposkytuje modulrandom 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.[12]
Vývojáři Pythonu se od začátku soustředí na srozumitelnostsyntaxe jazyka a v tomto ohledu ho vylepšují dodnes. Mnoho vývojových vylepšení jazyka Python spočívá jen v tom, že umožňuje snadněji zapsat to, co už v něm bylo možno zapsat, ale složitějším způsobem. Např. na rozdíl od jazyků, jako jeC neboJavaScript, místo operátorů&& a|| používá operátoryand aor, anglická slova pro „a“ a „nebo“. Když se ukázalo, že začínající uživatelé mívají u řetězců problém s funkcístrip() a používají ji nevhodně na nevhodné úkoly, byly doplněny funkceremoveprefix() aremovesuffix(), které zjednodušují a zpřehledňují častý programátorský úkon. V Pythonu sebloky kódu vytváří pouze jeho odsazováním. To je vlastnost, kterou někteří programátoři kritizují, protože většina jazyků na to používá složené závorky (C, JavaScript) nebo různáklíčová slova ve smyslu begin a end.
Vymezování bloků kódu odsazováním v Pythonu je postavena na myšlence, že odsazování kódu je nezbytné pro přehlednost kódu. Správné odsazování je nutné pro správnou funkčnost kódu. Toto rozhodnutí ale znemožňujeminifikaci, tj. odstranění znaků, které nejsou nutné pro funkčnost programu. Ta se používá např. při přenosu kódu přes Internet.
Měnné objekty mohou změnit svou hodnotu, neměnné nemohou a proto mohou sloužit jako klíč do slovníku.
Čísla typufloat v Pythonu (a většině programovacích jazyků) jsou reprezentována podle standarduIEEE 754 pro plovoucí desetinnou čárku (floating-point arithmetic). Tento standard definuje formát pro uložení reálných čísel a provádění aritmetických operací s nimi, aby bylo zajištěno, že výsledky jsou konzistentní a předvídatelné napříč různými počítačovými systémy. Datový typfloat má dvojitou přesnost (64-bit), odpovídá tedy datovému typudouble v C.
Tento datový typ nedokáže všechna konečná desetinná čísla ukládat přesně, kvůli jejich nekonečnému rozvoji. Vdesítkové soustavě to známe třeba u zlomku 1/3, který je 0,3333 a dál až do nekonečna. V počítači jsou čísla uložena v dvojkové soustavě a u ní dochází také k nekonečnému rozvoji některých zlomků, ale jinému než v desítkové soustavě, takže to na první pohled není poznat. Například 1/10, tedy číslo 0.1 je v paměti počítače uloženo nepřesně. Ta nepřesnost je velmi malá, že není u jednoduché nepřesnosti vidět, ale jejich sčítáním se nepřesnost zvyšuje, až tato vidět je a může ovlivnit běh programu.
Ta nepřesnost je velmi malá. Kdybychom například počítali něco v metrech, je to chyba menší než velikost atomu, ale přesto je to chyba a třeba při porovnávání už může vést k fatálně nečekanému výsledku. Pro potřeby přesného počítání proto máme v Pythonu i modulfraction adecimal pro přesné výpočty, které jsou ale pomalé.
Proměnná je pojmenovaný ukazatel na objekt. Protože datový typ je součástí hodnoty, není třeba ji nějak deklarovat. Ale možné to je, protože Python podporuje anotace datových typů.
x=5# proměnné 'x' přiřadí hodnotu 5y=[1,2,3]# proměnné 'y' přiřadí seznam hodnot 1, 2, 3z=y# proměnné 'z' se přiřadí ten samý seznam hodnot 1, 2, 3y[0]=x# první prvek seznamu 'y' je nastaven na hodnotu 5z=y[:]# vytváří kopii seznamu 'y', kterou přiřazujeme k 'z'z[0]=0# 'z' ukazuje na seznam 0, 2, 3; 'y' stále ukazuje na seznam 5, 2, 3
Python má rozsáhlou skupinu standardních operátorů.
Za pozornost stojí dva operátory pro dělení, kdy jeden dělí desetinně a druhý celočíselně a walrus operátor, který zkracuje psaní kódu.
Aritmetické operátory
+ – sčítání
- – odčítání
* – násobení
/ – dělení
% – modulo
** – umocnění
// – celočíselné dělení
Porovnávací operátory
== – rovná se
!= – nerovná se
> – větší než
< – menší než
>= – větší nebo rovno
<= – menší nebo rovno
Logické operátory
and – logické A
or – logické NEBO
not – logické NE
Bitové operátory
& – bitový AND
| – bitový OR
^ – bitový XOR
~ – bitový NOT
<< – bitový posun doleva
>> – bitový posun doprava
Přiřazovací operátory
= – přiřazení
+= – přičtení
-= – odečtení
*= – násobení
/= – dělení
%= – modulo přiřazení
**= – umocnění přiřazení
//= – celočíselné dělení přiřazení
Přiřazovací bitové operátory
&= – bitový AND a přiřazení
|= – bitový OR a přiřazení
^= – bitový XOR a přiřazení
>>= – bitový posun doprava a přiřazení
<<= – bitový posun doleva a přiřazení
Identitní operátory
is – je
is not – není
Členské operátory
in – je členem
not in – není členem
Další operátory
:= – walrus operátor (přiřazení v rámci výrazu)
Podívejme se blíže na běžné '/' a celočíselné '//' dělení, což patří mezi méně obvyklé operátory.
6/2# výsledek je desetinné číslo 3.05//2# výsledek je zaokrouhlené celé číslo 25.0//2# výsledek je zaokrouhlené desetinné číslo 2.0# pozor toto je matoucí, celočíselné dělení hodnotu zaokrouhlí# ale protože jeden z operandů je float, výsledek je float
Walrus operátor byl přidán v Pythonu 3.8. Umožňuje současně přiřadit proměnné hodnotu a hned ji použít ve výrazu.
# standardní způsobden=ziskejDen()ifdenin('Sobota','Neděle'):print(f'{den} je víkend.')# vypíše např. Neděle je víkend.# walrus způsobif(den:=ziskejDen())in('Sobota','Neděle'):print(f'{den} je víkend.')# vypíše např. Neděle je víkend.# pozor, in má vyšší prioritu než :=ifden:=ziskejDen()in('Sobota','Neděle'):print(f'{den} je víkend.')# vypíše např. True je víkend. - nejprve se vyhodnotí in a jeho výsledek se vloží do den# Přiřazenou proměnou je možno použít ve výrazu opakovaně:if(den:=ziskejDen())=='Sobota'orden=='Neděle':print(f'{den} je víkend.')
Větvení programu
if,elif,else – Podmíněné větvení pro rozhodování na základě podmínek.
match,case – Větvení na základě vzorů, něco jakoswitch v jiných jazycích, ale mnohem komplexnější, v Pythonu až od verze 3.10.
Cykly programu
for,in – Cyklus pro iteraci přes položky v sekvenci nebo iterátoru.
while – Cyklus pro opakované vykonávání bloku kódu, dokud je podmínka pravdivá
break – Příkaz pro okamžité ukončení nejbližšího obklopujícího cyklu.
continue – Přeskočí zbytek těla cyklu a pokračuje další iterací.
Struktura programu
Moduly
import,from,as – Import modulů nebo objektů z modulu.
Volatelné konstrukce
class – Definice třídy.
def – Definice funkce nebo metody ve třídě.
lambda – Definice anonymní funkce.
return – Ukončení funkce/metody a vrácení hodnoty
yield – Přerušení funkce/metody a vrácení hodnoty (generátory)
Asynchronní programování
async def – Definice asynchronní funkce.
await – Čeká na dokončení asynchronní funkce.
Výjimky, ošetření chyb
assert – Používá se pro testovacíaserce, které vyhodnotí podmínku jako pravdivou.
try,except,finally,else – Zachycení a ošetření výjimek.
raise – Vyvolání výjimky.
Kontextový manažer
with,as – Kontextový manažer pro automatické spravování prostředků.
Práce s proměnnými
del – Vymaže proměnnou
global – Deklarace globální proměnné.
nonlocal – Deklarace, že proměnná není lokální ani globální, ale nachází se v nadřazeném oboru.
Ostatní
pass – Prázdný příkaz, používá se jako zástupný symbol.
V Pythonu si můžeme definovat pomocí tříd vlastní datové typy. Aby byly považovány za objekt určitého druhu, je nutné jim implementovat k tomu určené rozhraní, které se také nazývají protokoly. Pokud si budeme chtít definovat třeba vlastní číselný typ, například Uhel, budeme mu muset implementovat aritmetické rozhraní, aby je bylo možno např. násobit. Zde je seznam jednotlivých rozhraní.
read(size=-1): Čte z souboru daný počet bytů, nebo pokud jesize nezadáno nebo záporné, čte až do konce souboru.
readline(size=-1): Čte jednu řádku ze souboru s možným omezením délky.
readlines(hint=-1): Čte ze souboru a vrátí list řádků, možno omezit pomocíhint.
write(s): Zapisuje řetězecs do souboru.
writelines(lines): Zapisuje seznam řádkůlines do souboru.
seek(offset, whence=SEEK_SET): Přesune pozici čtecího/zapisovacího ukazatele v souboru.
tell(): Vrátí aktuální pozici ukazatele v souboru.
flush(): Vyprázdní vnitřní buffer souboru, zápis všech nezapsaných dat na disk.
close(): Zavře soubor.
__enter__(self): Vstup do kontextového manažera, obvykle při použitíwith.
__exit__(self, exc_type, exc_val, exc_tb): Ukončení kontextového manažera, automatické zavření souboru.
Toto rozhraní krom objektu file (otevřeného souboru) implementuje řada dalších objektů, například objekty síťových soketů – pro práci se síťovými spojeními, kde mohou být data čtena a zapisována do soketu podobně jako do souboru, nebo objekty I/O proudů z modulu io – jakoStringIO aBytesIO, které umožňují s řetězcem pracovat jako se souborem nebo objekty pro práci s externími procesy z modulusubprocess.
Jednoduché IDE pro začátečníky, obsahuje debugger a rozhraní pro správu balíčků. Designováno pro výuku Pythonu. Do roku 2018 probíhal vývoj tohoto IDE naTartuské univerzitě.
Konfigurovatelný textový editor, podpora balíčků pro rozšíření funkcionalit, včetně podpory pro Python. Vývoj a podpora tohoto editoru byly ke konci roku 2022 ukončeny.[19]
Standardní Python je implementován vjazyce C. Tuto implementaci vyvíjí Python Software Foundation a tato implementace představuje a definuje standard jazyka Python. Existuje ale celá řada dalších implementací jazyka Python pro různá prostředí nebo další cíle.
Standardní Python je implementován v jazyce C, tato implementace je označovánaCPython. V ní 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íchC neboC++. Takto zabudovanýinterpret jazyka Python pak představuje nástroj pro pružné rozšiřování funkčnosti výsledné aplikacezvenčí. 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.
Jython je implementace Pythonu pro prostředí JVM. Je implementován v jazyceJava. Kód napsaný v Jythonu běží vJVM Javy a může používat všechny knihovny prostředí Java. V Javě lze naopak používat všechny knihovny napsané v Jythonu.
Jython je implementace CPythonu 2. Poslední stabilní verze Jythonu 2.7.3 je z března roku 2022.
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á firmaMicrosoft, lze očekávat, že význam implementaceIronPython dále poroste. Vzhledem k vlastnostem jazyka Python lze také předpokládat, že se implementace IronPython stane dlouhodobě podporovanou.
I IronPython je implementace CPythonu 2. Poslední verze IronPythonu je 2.7.12 vydaná v roce 2022 a 3.4.0 vydaná v roce 2022. Negativně může být vnímána skutečnost, že implementace IronPython je vyvíjena firmou Microsoft pod Microsoft Public License.
Brython je implementace Pythonu 3 v JavaScriptu. Jejím cílem je umožnit vewebovém prohlížeči programovat v jazyce Pythonu místo v JavaScriptu. Brython je transkompilátor, tedy překladač Python kódu do JavaScript kódu. Tento překlad se spouští automaticky na pozadí, programátor může psát Python kód rovnou do html stránky jako<script type='text/python'>. Možnosti Python programu jsou proto omezeny možnostmi prohlížeče a JavaScriptu. Nelze používat např. blokující volánítime.sleep() nebo modulasync. Místo toho jsou k dispozici alternativní moduly kompatibilní s webovými prohlížeči.
RPython je dialekt Pythonu pro velmi specifické využití. Pro vývoj dynamických jazyků a jejich interpretů. Syntaxe jazyka RPython vychází z jazyka Python, ale je velmi omezená. R v názvu znamená restricted. Teoreticky lze využít i k vývoji jiných programů, ale nepředpokládá se to. RPython není na rozdíl od CPythonu interpret, ale překladač. Jeho výsledkem je nativní spustitelný program, který je oproti interpretovaným programům významně rychlejší.
Cython je C rozšíření jazyka Python a transkompiler. Cython překládá zdrojový Python kód do C kódu, který se následně standardním překladačem překládá do binárního kódu. Výsledkem je tedy nativní program stejně jako u RPythonu. Na rozdíl od RPythonu je Cython univerzální a neklade si žádné omezení na syntaxi Pythonu, naopak ji rozšiřuje. Už přeložení čistého Python kódu Cythonem vede typicky k dvakrát rychlejšímu programu oproti interpretované verzi v CPythonu.
Pomocí optimalizací lze výkon programu téměř na úroveň implementace takového programu přímo v jazyce C.[23] Cython přidává do syntaxe Pythonu možnost statických typů a dalších možností jazyka C, včetně používání funkcí ze standardních C knihoven. Výsledkem Cythonu může být buď spustitelný program nebo modul, v kterém mohou být implementovány výpočetně náročné funkce, které pak lze využívat ze standardního CPythonu. Viz kap. Výkon Pythonu.
PyPy je alternativní interpret jazyka Python, který je zaměřen na výkon. Tento interpret je kompilován RPythonem. RPython obsahuje vlastní implementaci JIT. Má i další výkonově užitečné vlastnosti, třeba stackless mód, který poskytuje výkonné mikro thready pro masivní paralelní programování. PyPy navazuje na Psyco, což byl JIT kompilátor pro Python2. Poslední verze PyPy 7.3.14 z 2023 implementuje Python 2.7, a 3.7, 3.8 a 3.9.
RustPython je implementace Pythonu 3 v jazyceRust. RustPython lze vložit do programů Rust a používat Python jako skriptovací jazyk pro aplikaci napsanou v Rustu, nebo jej lze zkompilovat do WebAssembly, a je možné spouštět RustPython v prohlížeči. RustPython je zdarma a open-source podlicencí MIT. RustPython má experimentální JIT kompiler, který není defaultně zapnut. Implementuje CPython 3.12.
MicroPython je znovu napsaná odladěná štíhlá efektivní implementace Pythonu 3.4 (+ vybrané věci z 3.5 a vyšších) pro mikrokontrolery. Mikrokontroléry disponují omezeným množstvím pamětí a jsou výkonově limitovány. MicroPython je optimalizovaný pro taková prostředí. Je to implementace celého samotného jazyku a několika málo modulů ze standardní knihovny a pár modulů navíc pro práci s mikrokontrolery, například inline assembler. Stačí mu 256 kB úložného prostoru a 16 kB RAM. Na MicroPython a vývoj programů pro mikrokontrolery je specializováno jednoduché IDEThonny pro Windows, Mac i Linux. Podporuje ale i plnohodnotný Python a z povahy věci umožňuje interprety snadno střídat, kód spouštět simulovaně nebo v mikrokontroleru. Pro začátečníky je Thonny dobrá volba.
Následující standardní knihovny Pythonu byly „mikroifikovány“, aby odpovídaly filozofii MicroPythonu. Poskytují základní funkcionalitu tohoto modulu a jsou určeny jako náhrada standardní knihovny Pythonu. Nejsou s nimi ale plně kompatibilní.
array – pole číselných dat
asyncio — asynchronní plánovač I/O
binascii – binární/ASCII převody
builtins – vestavěné funkce a výjimky
cmath – matematické funkce pro komplexní čísla
collections – datové typy kontejnerů a kolekcí
errno – systémové chybové kódy
gc – garbage collector
gzip – komprese a dekomprese gzip
hashlib – hashovací algoritmy
heapq – implementace heap fronty
io – vstupní/výstupní operace
json – Kódování a dekódování JSON
math – matematické funkce
os – základní služby „operačního systému“.
platform – přístup k identifikačním údajům základní platformy
random – generátor náhodných čísel
re – regulární výrazy
select – IO multiplexing, sledování více kom. kanálů současně
CircuitPython je fork MicroPythonu a stejně jako on je specializován na programování mikrokontrolerů. Stojí za ním Adafruit, známý výrobce mikrokontrolerů a dalšího příslušenství pro ně. Důvodem pro rozvětvení MicroPythonu a vznik CircuitPythonu je vyšší uživatelská přívětivost CircuitPythonu pro naprosté začátečníky i za cenu některých omezení a ztráty výkonu.[24]
MicroPython má blíže k hardware a vlastnosti tohoto hardware se projevují v kódu, který je bez úprav nepřenosný mezi různými druhy mikrokontrolerů. CircuitPython přidává další vrstvu, která tyto rozdíly odstraňuje, ale za cenu vyšších paměťových nároků a nižší rychlosti. CircuitPython se snaží také odstranit rozdíly dodávaných knihoven vůči CPythonu a učinit programování mikrokontrolerů ještě jednodušší. Je primárně zaměřen na vzdělávání.
Standardní distribuce je dostupná zdarma na oficiálním webu.
K dispozici jsou aktuální balíčky pro
Windows (32-bit, 64-bit a ARM64)
MacOS (64-bit)
Linux (jen zdrojové kódy)
A dále jsou v nabídce odkazy pro platformy: AIX, IBM i, OS/390, z/OS, RISC OS, Solaris, UEFI, VMX a HP-UX. Zpravidla se jedná o starší verze Pythonu a jsou to odkazy na jiné distribuce.
Komerčních distribucí pro Python je celá řada. Krom samotného Pythonu mohou obsahovat různá IDE a předinstalované ne-standardní knihovny, zaměřené na nějakou oblast. Jmenujme např.ActivePython od ActiveState, který vyvíjí i IDE Komodo, nejen pro Python, ale i další jazyky jako PHP, Go, Node.js a další a které je pro Windows, MacOS i Linux. Další známá distribuce jeAnaconda, určená pro vědecké výpočty (data science, strojové učení aplikace, zpracování dat, prediktivní analýzy atd.). Na závěr zmiňme WinPython, tato distribuce se zaměřuje jen na platformu Windows a připravuje pro ni portable verzi Pythonu, tedy takovou, která se nemusí instalovat a jde rovnou spustit.
V Linuxových distribucích je zvykem, že si každá distribuuje svůj software sama. Proto každá Linuxová distribuce je i distribucí Pythonu. Není neobvyklé, že Python je v Linuxu už předinstalován a instalovat se vůbec nemusí. To se platí i pro oblíbenou platformuRaspberry Pi s linuxovým Raspbian OS.
Pro Android zmiňme dvě významné distribuce Pythonu.
Vývoj Python programu na Androidu
První je součástí Termuxu.Termux je emulátor terminálu s linuxovou distribucí, který se do Androidu instaluje jako běžná aplikace. Spuštěním Termuxu spustíme terminál s příkazovou řádkou. Příkazempkg install python nainstalujeme standardní Python se vším všudy. Podobně lze nainstalovat i editor Vim a máme k dispozici plnohodnotné vývojové prostředí. Doinstalovat lze řada dalších standardních linuxových nástrojů i jazyků, včetně jazyka C s možnosti kompilace programů ze zdrojových kódů a možností je v Termuxu spustit. To umožňuje do Pythonu v Termuxu instalovat i kompilované knihovny napsané v C. Některé jsou k dispozici již přeložené v balíčkovém systému Termuxu a dostupné přes pkg. Jedná se o velké oblíbené knihovny jako numpy, scipy, torch, lxml, pillow, greenlet, pygobject, matplotlib a další.
To zajišťuje na Androidu kvalitní a stabilní produkční prostředí pro vývoj programů v jazyce Python (i jiných). Na obrázku je vidět snímek obrazovky Androidu. Ukazuje v Termuxu spuštěný vývojářský editor Vim. Základní klávesnice Hacker's keyboard je rozšířena o plně konfigurovatelnou klávesnici extra-keys Termuxu. Vim má obrazovku rozdělenou na tři okna. Uprostřed je kód Python Programu, v pravém okně je výstupní okno s chybovým hlášením a v levém okně je open ai pomáhající s vývojem programu a provádějící rutinní operace.
Hlavní omezení vývoje Python aplikací na Termuxu spočívá v tom, že Termux v základu poskytuje pouze textové rozhraní, takže v něm nelze vyvíjet grafické aplikace, třeba s knihovnou pygame nebo Tkinter. Lze ale mít v Termuxu spuštěný server a vyvíjet aplikaci, která jako grafický frontend využívá Chrome. Také lze přes Termux api otvírat dialogová okna Androidu, přistupovat k notifikacím Andtoidu, což může pro některé jednoduché věci stačit. Termux má také podporu X Window Xystému a lze z něj provozovat grafický desktop vzdáleně, buď na jiném počítači, nebo přes VNC klienta přímo na tom samém Androidu.[25] Ale to je spíše zajímavost než produkční řešení pro práci, protože to není plnohodnotné řešení. Například toto grafické rozhraní nepodporuje hw akceleraci.
Komu by toto omezení vadilo a chtěl by vyšší grafický výkon, třeba pro pokusy s pygame, může si nainstalovat placenou Pydroid 3.[26] To je IDE pro Python 3 na Androidu, které podporuje vývoj grafických aplikací a umožňuje používat pygame, Tkinter nebo Kiwi. Obsahuje terminál emulátor, pip, Cython, PDB, knihovny: numpy, scipy, matplotlib, jupyter, OpenCV, TensorFlow, PyTorch, Tkinter, pygame, Kivy a další. Dokonce i C, C++ a Fortran kompiler pro překlad Python modulů. Prostředí nicméně není odladěné a stabilní a je označeno jakoeducational Python 3 IDE.
Pro iOS je k dispozici Python IDE Pythonista.[27] Ten obsahuje navíc knihovnu s podporou 2D grafiky, zvuku a multitouch funkcí a další knihovny specifických pro iOS. Z dalších distribucí lze alespoň jmenovat Pyto.[28]
BBC micro:bit je populární výukový jednočipový mikropočítač o velikosti poloviny platební karty. Lze ho programovat mimo jiné i pomocíMicroPythonu. MicroPython byl původně vyvinut pro desku pyboard, ale dnes je použitý s širokou škálou mikrokontrolerů. Za vyjmenování stojí známé Lego Mindstorm EV3[29] a Raspberry Pi Pico[30]. MicroPython byl rozvětven a na jeho základě vznikl také podobnýCircuitPython.
Výkonnost programů napsaných v samotném Pythonu je nízká. Programy napsané v Pythonu běží pomaleji oproti programům napsaných v kompilovaných programovacích jazycích, jako je třebajazykC++.[31]
Program v Pythonu může být pomalejší řádově desetinásobně, klidně i padesátkrát. To ho činí například nevhodným pro vývoj velkých a graficky náročných her nebo grafických kodeků a podobně.
Ale jinak to v praxi často nevadí a to z řady důvodů:
Počítače jsou tak rychlé, že to v některých případech stejně nepozorujeme. Kdo pozná rozdíl mezi výpočtem 0,01 sec a 0,0005 sec?
Vnější zdržení, třeba čekání na odezvu serveru, nebo i odezvu člověka, než zadá vstup, je tak vysoké, že zdržení které přidává Python je zanedbatelné.
Mnoho knihoven Pythonu využívá principu extending a je napsáno v kompilovanémjazyce C. Python slouží jen k předání dat této knihovně, která se rychle postará o zbytek. Toho se využívá například u grafického rozhraní nebo vědeckých a výpočetních knihoven, jako je např.NumPy.
Pomocí transpileru jde Python kód přeložit pomocí jazyka C a tím ho urychlit. Není to úplně triviální a je dobré kód i optimalizovat, ale pak se dostáváme téměř k rychlosti jazyka C. A z důvodu 3) víme, že stačí mít takto ošetřeny jen kritické, výkonově náročné, části kódu. Tedy spíše než celé programy stačí transpilovat jen ty náročné části programu. Programátor je vyčlení do samostatného modulu, a de facto si takto vytvoří vlastní soukromou knihovnu. S velkou pravděpodobností se jedná jen o krátkou část kódu, a u zbytku programu můžeme stále využít vysoké produktivity psaní programů v Pythonu.
V historii Pythonu vznikla řada optimalizačních technik.
V minulosti se pro zvýšení výkonu používala snadno použitelná knihovnaPsyco, kterátransparentněoptimalizovala kód Pythonu na výkon (JIT). Některé operace byly pomocí Psyco urychleny až řádově.[32] Tato knihovna je cca od roku 2010 neudržovaná a použitelná jen pro 32bitové prostředí a podporuje Python jen do verze 2.6. Na knihovnu Psyco navázal projekt PyPy, tedy alternativní interpret Pythonu, který obsahuje JIT kompiler a je účinnější než Psyco.
Další, ještě účinnější způsob dosažení vyššího výkonu v Pythonu je použití transpileru Cython s optimalizací kódu na výkon. Následující příklad ukazuje neoptimalizovanou a maximálně optimalizovanou funkci. Tedy změny, které je nutno učinit v kódu pro získání maximálního výkonu pro použití s transkompilerem Cython.
Účinnost těchto optimalizací je velmi vysoká. Takto optimalizovaný program dosahuje téměř výkonu aplikace napsané přímo v jazyce C. Viz benchmark, který porovnává výkon programu při výpočtu velkéMandelbrotovy množiny.
Benchmark výkonu funkce pro výpočet Mandelbrotovy množiny s rozlišením 4096×4096 v sec.
CPython 2
CPython 3
Jython
RPython
ANSI C
Cython (bez úprav)
Cython (typy)
Cython (plná optimalizace)
150,31
152,21
203,18
18,64
4,75
88,67
16,42
4,80
Jak je vidět, už jen samotný překlad rychlost zdvojnásobí. Doplnění C datových typů zrychlí program desetinásobně. Ale to není zadarmo, tímto krokem už přicházíme o užitečnou datovou flexibilitu Pythonu. Při plné optimalizaci dosahujeme téměř rychlosti jazyka C.
Ukázkový programHello world vypadá velmi jednoduše:
print("Hello, World!")# ve verzích 2.x print "Hello, World!"
Program pro výpočet obsahu kruhu ze zadaného poloměru v syntaxi Python 3:
# toto je komentář a interpret jej ignorujeimportmath# zpřístupní modul s matematickými funkcemi a konstantami (sin, cos, pi atp.)vstup=input("Zadejte polomer: ")# zobrazí výzvu a načte nějaký řetězec. Ve verzi 2.x se místo funkce input používá funkce raw_inputr=float(vstup)# převede řetězec na desetinné čísloS=r**2*math.pi# umocní r na 2 a vynásobí jej píprint("Výsledek je:",S)# zobrazí výsledek. Ve verzi 2.x se píše bez závorek
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énaa ib 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énob projeví i při následném přístupu přes jménoa. Příklad – zrušíme první prvek seznamu přes jménob a zobrazíme obsah seznamu přes jménoa:
delb[0]
Ve výsledku majía ab stejnou „hodnotu“[2]. Odkazování na stejný objekt lze zjistit konstrukcí:
Lze s ní manipulovat, ukládat do proměnných, polí, objektů. Přesněji řečeno, manipuluje se s odkazem na objekt funkce. S objektem funkce je možné podle potřeby svázat i nové jméno, případně ji i kdykoliv předefinovat.
Do složených datových struktur se ukládají odkazy na objekty, nikoliv objekty samotné. Typ objektu není vázán na odkaz, ale je svázán až s odkazovaným objektem. Z toho vyplývá, že například do jednoho seznamu je možné 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}]#od verze 3.0 není potřeba před řetězce psát U, protože všechny řetězce jsou Unicode.
Jinými slovy, z technického hlediska jsou odkazy všechny stejného typu (interního), který nemá žádný vztah k typu odkazovaného objektu. Technicky lze tedy seznam považovat za homogennídatový typ. Z uživatelského pohledu to vypadá, že do seznamu můžeme vkládat hodnoty různého typu. Ještě jednou – do seznamu se nevkládají hodnoty daných typů, ale jenbeztypové odkazy na příslušné objekty.
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.
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.
Při operacích nad objekty se zpravidla provádí silnátypová kontrola[chybí zdroj], to znamená, že při operacích s typy nedochází k automatickému přetypování hodnot. Výjimkou jsou v Pythonu 2 datové typy int a long, kde nedochází k přetečení datového typu int, ale k automatickému přetypování hodnoty z int na long. Python 3 už podporuje pouze datový typ int, který má vlastnosti jako datový typ long v Pythonu 2.
Dále jsou v Pythonu 2 i Pythonu 3 podporovány aritmetické operace různých numerických datových typů. Například lze sečíst datové typy int a float, výsledkem bude datový typ float, 1 + 1.0 = 2.0. Na rozdíl od řady jiných interpretovaných dynamických jazyků nedochází k automatickému převodu číselných textových řetězců na čísla, proto 1 + '1' = výjimka.
Výjimku vyvolá každá nepodporovaná operace různých datových typů. Nepodporované je třeba dělení řetězců, proto 'abcd' / 2 = výjimka. Násobení podporované je, proto 'abcd' * 2 = 'abcdabcd'.
Datové typy se kontrolují dynamicky, to jest až během chodu programu, nikoliv při kompilaci kódu.
Python 3.x podporuje volitelné statické typové anotace, které umožňují externím nástrojům, jako je např. mypy, provádět statickou analýzu a kontrolu datových typů v python kódu. Samotný standardní interpret Pythonu s nimi v současné době nepracuje (ignoruje je), pouze umožňuje jejich syntaxi, takže se nevyužívají k optimalizaci rychlosti běhu rychlosti.
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átorplus, je možné předat jednak číselné a jednak řetězcové argumenty:
Interpret jazyka Python můžeme spustit v interaktivním režimu. Tento režim se používá především prorychlé pokusy. Řádkový vstup je v takovém případě uvozen znaky>>>.
Je-li očekáván pokračovací řádek zápisu dosud nedokončené konstrukce, pak je vstupní řádek uvozen znaky.... Dokončení zápisu konstrukce vyjadřujeme v interaktivním režimu zadáním prázdného řádku.
>>>deff(c,n):...returnc*n...>>>f(a,5)15
V interaktivním režimu většinou nepoužíváme příkazprint (ale nic nám v tom nebrání). Pokud chceme zobrazit obsah proměnné, stačí za úvodní znaky zapsat její jméno.
>>>a=1+2>>>a3
Proměnná_ obsahuje poslední takto použitou hodnotu.
Python je vyvíjen s důrazem na pragmatičnost. To znamená, že vývoj jeho verzí je spíše evoluční. Přirozeným důsledkem takového přístupu je i zpětné hodnocení dobrých a horších vlastností jazyka. Navíc historickým vývojem některé technologie zastarávají a je třeba je nahradit nebo jim jazyk přizpůsobit. Výsledkem toho je nová nekompatibilní verze nebo pomalu zastarávající jazyk.
Obojí přístup má svá rizika, jak změna tak ustrnulost. Python si vybral změnu a rozjel projekt Python 3000 (Py3k).[33][34] A zatím, co změna z verze jedna na verzi dva byla bezbolestná, protože Python v té době nebyl ještě tak rozšířený, změna na verzi tři byla velmi bolestná. Znamenalo to přepsat všechny významné knihovny a software a dlouho udržovat dvě verze knihoven pro Python 2 a 3 paralelně. Vývojáři Pythonu vynaložili mnoho práce, aby programátorům v Pythonu přechod usnadnili, přesto významně trval přes deset let a v malém trvá dodnes (2024), protože je stále možno se potkat s Pythonem 2. A i když Python 3 dnes už naprosto jasně dominuje a nový projekt začít dělat v Pythonu 2 snad už nikoho nenapadne, přesto je dobré mít nějaké povědomí o zásadních nekompatibilních změnách, které proběhly. Jsou dobře zdokumentovány, proto jen stručný přehled hlavních změn.
Hlavní změny mezi Pythonem 2 a Pythonem 3, které přinesly nekompatibilitu v kódu
↑ PyCharm 3.0 Community Edition source code now available | The PyCharm Blog.The JetBrains Blog [online]. 2013-10-22 [cit. 2025-12-22].Dostupné online. (anglicky)
↑ History and License.Python documentation [online]. [cit. 2025-12-22].Dostupné online. (anglicky)
↑ vim/LICENSE at master · vim/vim.GitHub [online]. [cit. 2025-12-22].Dostupné v archivu pořízeném z originálu dne 2025-08-31. (anglicky)
↑ Co je to svobodný software? – Projekt GNU – Nadace pro svobodný software.www.gnu.org [online]. [cit. 2025-12-22].Dostupné online.
↑Sunsetting Atom [online]. 2022-06-08 [cit. 2025-12-22].Dostupné online. (anglicky)
↑LARDINOIS, Frederic.GitHub Open Sources Its Atom Text Editor [online]. 2014-05-06 [cit. 2025-12-22].Dostupné online. (anglicky)
↑MICROSOFT. vscode/LICENSE.txt at main · microsoft/vscode.GitHub [online]. [cit. 2025-12-22].Dostupné online. (anglicky)
↑JUPYTER. notebook/LICENSE at main · jupyter/notebook.GitHub [online]. [cit. 2025-12-22].Dostupné online. (anglicky)
↑TIŠNOVSKÝ, Pavel. Praktické použití nástroje Cython při překladu Pythonu do nativního kódu.Root.cz [online]. [cit. 2023-05-22].Dostupné online.
↑DAVIS, A. Jesse Jiryu.Python Software Foundation News: Scott Shawcroft: History of CircuitPython [online]. 2019-05-18 [cit. 2025-03-15].Dostupné online.
↑MCMURRAY, Alex. Python is 57x slower than C++ (and 45x worse for the planet).eFinancialCareers [online]. 2023-06-30 [cit. 2023-08-28].Dostupné online. (anglicky)