Dosud jsme jako základní nástroj pro abstrakci funkce, které nám sloužili k roydělení kódu do jednotlivých čáastí vykonávající nějaký výpočet. Pokud bychom ale měli k dispozici jen funkce, tak by při větších projektech měl soubor se zdrojovým kódem několik desítek tisíc řádků. V takovém případě by orientace v takovém kódu byla velmi náročná.
Proto nám jazyk Python (a další jazyky) umožňuje rozdělit zdrojový kód do samostaných souborů, kde v jednom souboru máme funkce sloužící například pro práci se seznamy. Tímto docílíme ještě lepšího rozdělení zdrojového kódu. Soubor s funkcemi které slouží k řešení konkrétního problému nazýváme knihovna.
Moduly
Jako modul označujeme v jazyce Python soubor s připonou .py. Jedná se
o bězný soubor se zdrojovým kódem u kterého ale nepřepokládáme že bude spuštěn
ale, že bude vložen do jiného souboru. Jako příklad si vytvoříme soubor rmath.py
který bude obsahovat následující funkci:
PRECISION = 0.00000001
# výpočet druhé odmocniny pomocí Newtonovy metody
# https://cs.wikipedia.org/wiki/Metoda_tečen
def my_sqrt(number):
estimate = number
while True:
new_estimate = 0.5 * (estimate + number / estimate)
if abs(new_estimate - estimate) < PRECISION:
return new_estimate
estimate = new_estimate
# výpočet n-té mocniny
def my_power(base, exponent):
return float(base ** exponent)
Vložení modulu
Pro vložení knihovny používáme příkaz import
.
import file
Po vykonání příkazu import
se provede program který,
je zapsaný v souboru a vytvoří se nová proměnná pomocí které přistupujeme
k funkcím a promenným zapsaných v importovaném souboru.
Čtení ze souboru
Pro čtení souboru (v textovém režimu) slouží metody .read() a .readline(). V následujících ukázkách budeme předpokládat, že existuje soubor s názvem soubor.txt, který obsahuje
# importování souboru rmath.py
import rmath
# zavolání funkce my_sqrt
rmath.my_sqrt(2)
# výpis konstanty PRECISION
print(rmath.PRECISION)
Jméno pomocí kterého přístupujeme k funkcím a proměnným se nazyvá namespace.
Díky tomu víme z jaké knihovny danou funkci (proměnnou) používáme. Příkaz
import
umožňuje přejmenovat jmenný prostor
import file as name
Příklad
import rmath as m
m.my_sqrt(2)
V jazyce Python je možné importovat pouze část importovaného souboru, například pouze jednu funkci nebo proměnnou.
from file import part
Napřiklad můžeme chtít importovat pouze funkci my_power
from rmath import my_power
my_power(2, 10)
Importovanou část programu je možné přejmenovat (pomocí as
) a
je možné importovat více částí současně.
# import a přejmenování více částí programu
from rmath import my_sqrt as f1, my_power as f2
f1(2) # volání funkce my_sqrt()
f2(2, 2) # volání funkce my_power()
V případě, že chceme importovat celý obsah souboru, lze použít symbol * (hvězdička).
from rmath import *
Pro úplnost dodejme, že při použití from příkazu dochází k importování pouze specifikovaných částí.
from rmath import my_sqrt
# funkce funguje správně (má přístup ke konstantě PRECISION)
my_sqrt(2) # vypíše: 1.414213562373095
# náš program nemá přístup ke konstantě PRECISION
print(PRECISION) # způsobí chybu: NameError: name ’PRECISION’ is not defined
Pro lepší organizaci zdrojového kódu můžeme soubory umisťovat do adresářů. Při importu, pak vkládáme celou relativní cestu k souboru se zdrojovým kódem. Jako oddělovače adresářů používáme symbol . (tečka).
import my_library.rmath
# použití
my_library.rmath.my_sqrt(2)
# NEBO
import my_library.rmath as m
# použití
m.my_sqrt(2)
Existující knihovny
Jazyk Python obsahuje spoustu předprogramovaných knihoven.
Příkladem může být knihovna math
.
# import knihovny math (součást jazyka Python)
import math
# druhá odmocnina
print(math.sqrt(2))
Všechny dostupné knihvny lze najít na adrese: https://docs.python.org/3/library/.
Úkoly
matrix
z 1. zápočtového úkolu a importute tuto knihovnu do souboru main.py
.
V souboru main.py
naprogramujte funkci pro násobení matic. Implementaci svojí knihovny pro praci s maticemi
opatřete v prípadě potřeby novými funkcemi, aby jste usnadlili práci uživateům knihovny.