Moduly
Moduly jsou obdobou knihoven v jazyce C nebo Pascal Moduly jsou obdobou knihoven v jazyce C nebo Pascal. Jsou to obyčejné textové soubory s příponou .py (nebo zkompilované soubory s příponou .pyc). Mohou obsahovat funkce, proměnné, třídy, objekty atd. Existuje mnoho standardních modulů a ještě více si jich můžete stáhnout. Všechno, co je v modulech, si lze samostatně naprogramovat, avšak znalost těchto doplňků nám může ušetřit mnoho práce.
V Pythonu je ve standardní knihovně k dispozici mnoho modulů V Pythonu je ve standardní knihovně k dispozici mnoho modulů. Jedná se například o moduly: string - operace s řetězci (převod mezi čísly a řetězci, dělení a spojování řetězců, převod na malá a velká písmena) os - nejrůznější interface k službám operačního systému, spouštění procesů, operace s cestami v OS time - práce s časem re - práce s regulárními výrazy
numpy - knihovna pro práci s numerickými daty math - matematické funkce csv - podpora pro CSV cmd - příkazová řádka tempfile - práce s dočasnými objekty pickle – ukládání a načítání objektů do souborů a mnoho a mnoho dalších …
Obecně moduly zavádíme příkazem import (zavede do lokálního prostoru jmen objekt modulu), například >>> import muj_modul >>> import muj_modul as jmeno Existuje ale i varianta příkazu import, která rovnou zavede některé (popř. všechny) objekty z určitého modulu. >>> from muj_modul import mod1, mod2 >>> from muj_modul import *
Ukažme si názorný příklad s využitím modulu math: >>> import math >>> math.factorial(6) 720 >>> math.pi 3.141592653589793 >>> from math import pi, factorial >>> pi >>> factorial(6)
Jak již víme, moduly jsou obyčejné textové soubory s příponou. py Jak již víme, moduly jsou obyčejné textové soubory s příponou .py. Nyní si zkusíme vytvořit vlastní modul, který bude umět vypočítat faktoriál zvoleného čísla (obdobně jako funkce factorial z modulu math): def faktorial(n): if n == 0: return 1 else: return n * faktorial(n-1) -uložení souboru jako pokus.py Poznámka – v uvedeném příkladu je použita rekurze, tj. proces, při kterém funkce volá samu sebe
A poté již známým způsobem modul naimportujeme a provedeme výpočet faktoriálu. >>> import pokus >>> pokus.faktorial(6) 720 nebo >>> from pokus import faktorial >>> factorial(6)
Pro zrychlení spouštění krátkých programů, používajících velké množství standardních modulů, používá Python soubory s příponou .pyc, tzv. kompilované moduly. Pokud se kód pokusí zavést například námi vytvořený modul muj_modul a interpretr najde vedle souboru muj_modul.py i soubor muj_modul.pyc, považuje tento soubor za zkompilovaný modul. Proto porovná čas modifikace souboru muj_modul.py s časem zaznamenaným v souboru muj_modul.pyc. Jestliže jsou tyto časy shodné, rozhodne, že soubor muj_modul.pyc byl vytvořen ze souboru muj_modul.py a použije ho místo něj.
Tím dojde k významnému urychlení zavedení modulu, není třeba jeho kód znovu překládat do bytekódu, protože se použije již přeložená verze. O vytvoření souboru muj_modul.pyc se programátor nemusí vůbec starat, interpretr ho vytváří zcela sám vždy, když se mu podaří kód souboru muj_modul.py úspěšně přeložit do bytového kódu. Jestliže se soubor nepodaří vytvořit (důvodem může být například plný disk nebo nedostatečná práva uživatele), nedojde k chybě a při příštím importu modulu bude byte kód vytvořen znovu.
Moduly je také možné sdružovat do balíčků Moduly je také možné sdružovat do balíčků. Balíček je obyčejným adresářem, obsahujícím skupinu modulů a soubor s názvem __init__.py. Tyto balíčky umožňují hierarchickou organizaci modulů, například: Zvuk/ # Hlavní balíček __init__.py # Inicializace balíčku Format/ # Balíček pro audio formáty __init__.py wav.py mp3.py Efekt/ # Balíček pro zvukové efekty echo.py
>>> import zvuk.format.wav Uživatelé mohou z balíčku přímo importovat jednotlivé moduly následujícím způsobem: >>> import zvuk.format.wav >>> from zvuk.format import wav Moduly uvnitř balíčků se mohou na jiné moduly uvnitř stejných balíčků odkazovat relativní cestou. Tečka označuje aktuální balíček a dvě tečky nadřazený. >>> from . import echo >>> from .. import format >>> from .. format import wav