1.1 Wprowadzenie do modułów
Moduł w Pythonie to plik z rozszerzeniem .py, zawierający kod. Moduły pozwalają dzielić duży kod na mniejsze, bardziej zrozumiałe części. Każdy moduł może zawierać funkcje, klasy i zmienne, a także wykonywać pewien kod przy jego importowaniu.
Przykład prostego modułu
Stwórzmy moduł mymodule.py
:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Teraz ten moduł można zaimportować i używać w innym pliku.
1.2 Importowanie modułów
Python oferuje kilka sposobów importowania modułów. Przeanalizujmy je po kolei.
Importowanie całego modułu
Ogólna składnia tej operacji wygląda tak:
import modul
Ta metoda importuje cały moduł i możesz używać jego funkcji oraz zmiennych, wskazując nazwę modułu.
import modul
print(modul.greet("Alice")) # Wyjście: Hello, Alice!
print(modul.pi) # Wyjście: 3.14159
Robiliśmy już coś podobnego z modułem math
, pamiętasz?
import math
print(math.ceil(13 / 7)) # zaokrąglenie w górę
print(math.floor(13 / 7)) # zaokrąglenie w dół
Importowanie konkretnych elementów z modułu
Możesz importować nie wszystko, co jest w module, ale tylko niektóre jego elementy. Ogólna składnia tej operacji wygląda tak:
from modul import func, var
Ta metoda importuje tylko określone funkcje, klasy lub zmienne z modułu, co pozwala używać ich bez wskazywania nazwy modułu.
from mymodule import greet, pi
print(greet("Bob")) # Wyjście: Hello, Bob!
print(pi) # Wyjście: 3.14159
Importowanie modułu z aliasem
Ogólna składnia tej operacji wygląda tak:
import modul as alias
Ta metoda pozwala zaimportować moduł i przypisać mu inną nazwę, co może być użyteczne do skrócenia długich nazw modułów lub rozwiązania konfliktów nazw.
import mymodule as mm
print(mm.greet("Charlie")) # Wyjście: Hello, Charlie!
print(mm.pi) # Wyjście: 3.14159
Importowanie wszystkich elementów z modułu
Ogólna składnia tej operacji wygląda tak:
from modul import *
Ta metoda importuje wszystkie funkcje, klasy i zmienne z modułu, co pozwala używać ich bez wskazywania nazwy modułu. Jednak nie zaleca się korzystania z tej metody, ponieważ może to powodować konflikty nazw i utrudniać czytanie kodu.
from mymodule import *
print(greet("Dave")) # Wyjście: Hello, Dave!
print(pi) # Wyjście: 3.14159
1.3 Pod maską procesu importu
Porządek wyszukiwania modułów
Kiedy importujesz moduł, Python szuka go w określonej kolejności:
- Bieżący katalog: Python najpierw szuka modułu w bieżącym katalogu, z którego został uruchomiony skrypt.
- Zmienne środowiskowe
PYTHONPATH
: Jeśli moduł nie został znaleziony w bieżącym katalogu, Python szuka go w katalogach wskazanych w zmiennej środowiskowejPYTHONPATH
. - Standardowe katalogi: Jeśli moduł nadal nie został znaleziony, Python szuka go w standardowych katalogach, takich jak katalogi wskazane w
sys.path
.
Przykład:
import sys
for path in sys.path:
print(path)
Lokalny i globalny import
Importowanie modułów można wykonywać zarówno na poziomie globalnym (na początku pliku), jak i na poziomie lokalnym (wewnątrz funkcji lub metody).
Globalny import
Globalny import wykonywany jest na początku pliku i sprawia, że importowany moduł jest dostępny w całym pliku.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Lokalny import
Lokalny import wykonywany jest wewnątrz funkcji lub metody i sprawia, że importowany moduł jest dostępny tylko w tej funkcji lub metodzie.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
Lokalny import może być przydatny do zmniejszenia czasu ładowania modułu lub zapobiegania konfliktom nazw.
1.4 Dynamiczny import
Dynamiczny import pozwala importować moduły podczas działania programu. Może to być przydatne, gdy trzeba importować moduły na podstawie danych wprowadzonych przez użytkownika lub innych dynamicznych warunków.
Ogólna składnia tej operacji wygląda tak:
module = __import__("modul")
Zróbmy to na przykładzie, importując moduł math
w ten sposób.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Wyjście: 4.0
Praca z dalszym kodem jest podobna do używania import as
, kiedy modułowi math
przypisuje się alias module
.
1.5 Dostęp do atrybutów modułu za pomocą funkcji getattr
Funkcja getattr
pozwala dynamicznie zdobywać atrybuty z modułu (lub dowolnego obiektu). Może być przydatna w przypadkach, gdy nazwy atrybutów nie są z góry znane lub mogą się zmieniać podczas działania programu.
Składnia funkcji getattr
:
getattr(object, name, default = None)
Gdzie object
— to obiekt, z którego należy zdobyć atrybut, name
— to string zawierający nazwę atrybutu, a default
— wartość zwracana w przypadku, gdy atrybut z podaną nazwą nie istnieje. Wartość domyślna dla parametru default
to None
.
Przykład użycia funkcji getattr
:
import math
# Zdobywamy atrybut sqrt z modułu math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Wyjście: 5.0
# Próbujemy zdobyć nieistniejący atrybut, zwracamy wartość domyślną
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Wyjście: default_value
W tym przykładzie używamy funkcji getattr
do zdobycia funkcji sqrt
z modułu math
, a następnie wywołujemy tę funkcję, aby obliczyć pierwiastek kwadratowy liczby 25. W przypadku, gdy atrybut z podaną nazwą nie istnieje, zwracana jest wartość domyślna default_value
.
GO TO FULL VERSION