PYTHON Moduły
Wiemy już do czego służą i jak działają funkcje. Ułatwiają one życie, skracają kod, sprawiają, że staje się czytelniejszy. Można je wykorzystać w wielu miejscach jednego programu. Co jednak jeśli chcemy daną funkcję wykorzystać w wielu programach? Czy trzeba w każdym wklejać jej kod, żeby móc się do niej odwoływać?
Tu z pomocą przychodzą nam moduły. Pliki, w których możemy umieścić nasze funkcje, które później jedynie dołączamy do naszych programów.
Wróćmy do naszego przykładu z prostą funkcją obliczającą pole kwadratu. Zapiszmy jej kod w pliku pole.py.
Zawartość pliku pole.py:
def pole_kwadratu(dlugosc_boku) : pole = dlugosc_boku**2 print("Pole kwadratu o długości boku", dlugosc_boku, "wynosi:", pole)
Tworzymy drugi plik o nazwie test.py. Spróbujmy teraz wykonać funkcję pole_kwadratu.
Nie możemy tego zrobić zwyczajnie wywołując funkcję pole_kwadratu(), gdyż zwyczajnie w tym pliku nie istnieje.
Opcja 1: import modułu pole
Za pomocą słowa kluczowego import, importujemy plik pole.py do test.py. Spróbujmy teraz wykonać funkcję pole_kwadratu():
import pole pole_kwadratu(5)
W rezultacie próby wykonania naszego programu otrzymujemy błąd: NameError: name ‘pole_kwadratu’ is not defined
Dzieje się tak dlatego, że Python nadal nie wie, o co nam chodzi z nazwą pole_kwadratu, musimy mu powiedzieć konkretnie, że chodzi nam o funkcję pole kwadratu z zaimportowanego modułu pole:
import pole pole.pole_kwadratu(5)
Odwołanie do konkretnej funkcji danego modułu następuje poprzez podanie nazwy modułu (który musi zostać wcześniej zaimportowany), następnie po kropce nazwy funkcji.
W efekcie uruchomienia naszego programu otrzymamy oczywiście tekst:
Pole kwadratu o długości boku 5 wynosi: 25
Opcja 2: import konkretnej funkcji lub wszystkich funkcji z modułu
Aby nie musieć przed każdą funkcją z zaimportowanego modułu pisać jego nazwy, możemy zaimportować do programu konkretną funkcję z modułu, bądź nawet wszystkie funkcje w nim się znajdujące.
from pole import pole_kwadratu pole_kwadratu(5)
Tym razem podaliśmy, że z modułu pole importujemy funkcję pole_kwadratu. Od tej pory wykorzystując nazwę funkcji pole_kwadratu() program będzie wiedział, że chodzi nam o tę konkretną funkcję z modułu pole.
Możemy również zaimportować wszystkie funkcje z modułu pole i również korzystać z nich bez podawania przedrostka w postaci nazwy modułu:
from pole import * pole_kwadratu(5)
Nazwę konkretnej funkcji zastąpiliśmy symbolem * oznaczającym import całej zawartości. Tym samym niejako dokleiliśmy wnętrze modułu pole do naszego programu.
Możemy również odwoływać się do gotowych modułów, np. moduł matematyczny Math. Załóżmy, że chcemy obliczyć pierwiastek z podanej przez użytkownika liczby:
Opcja 1: import math
import math liczba = float(input("Podaj dowolną liczbę: ")) pierwiastek = math.sqrt(liczba) print("Pierwiastek z liczby",liczba,"wynosi:",pierwiastek)
Opcja 2: from math import sqrt
from math import sqrt liczba = float(input("Podaj dowolną liczbę: ")) pierwiastek = sqrt(liczba) print("Pierwiastek z liczby",liczba,"wynosi:",pierwiastek)