PYTHON

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)