Python - moduły
Moduł umożliwia logiczne organizowanie kodu w Pythonie. Grupowanie powiązanego kodu w moduł sprawia, że kod jest łatwiejszy do zrozumienia i użycia. Moduł to obiekt Pythona z dowolnie nazwanymi atrybutami, które można wiązać i odwoływać.
Po prostu moduł to plik składający się z kodu Pythona. Moduł może definiować funkcje, klasy i zmienne. Moduł może również zawierać kod do uruchomienia.
Przykład
Kod Pythona dla modułu o nazwie aname zwykle znajduje się w pliku o nazwie aname.py . Oto przykład prostego modułu, support.py
def print_func( par ):
print "Hello : ", par
return
Importu komunikat
Możesz użyć dowolnego pliku źródłowego w języku Python jako modułu, wykonując instrukcję importu w innym pliku źródłowym w języku Python. Importu ma następującą składnię -
import module1[, module2[,... moduleN]
Gdy interpreter napotka instrukcję importu, importuje moduł, jeśli jest on obecny na ścieżce wyszukiwania. Ścieżka wyszukiwania to lista katalogów, które interpreter przeszukuje przed zaimportowaniem modułu. Na przykład, aby zaimportować moduł support.py, musisz umieścić następujące polecenie u góry skryptu -
#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Zara")
Wykonanie powyższego kodu daje następujący wynik -
Hello : Zara
Moduł jest ładowany tylko raz, niezależnie od tego, ile razy był importowany. Zapobiega to wielokrotnemu wykonywaniu modułu w przypadku wielu importów.
Od ... import komunikat
Instrukcja from Pythona umożliwia importowanie określonych atrybutów z modułu do bieżącej przestrzeni nazw. Od ... import ma składnię następujące -
from modname import name1[, name2[, ... nameN]]
Na przykład, aby zaimportować funkcję fibonacci z modułu fib, użyj następującej instrukcji -
from fib import fibonacci
Ta instrukcja nie importuje całego modułu fib do bieżącej przestrzeni nazw; po prostu wprowadza element fibonacci z modułu fib do globalnej tablicy symboli modułu importującego.
Z importu ... * komunikat
Możliwe jest również zaimportowanie wszystkich nazw z modułu do bieżącej przestrzeni nazw za pomocą następującej instrukcji importu -
from modname import *
Zapewnia to łatwy sposób importowania wszystkich elementów z modułu do bieżącej przestrzeni nazw; jednakże tego stwierdzenia należy używać oszczędnie.
Lokalizowanie modułów
Podczas importowania modułu interpreter języka Python wyszukuje moduł w następujących sekwencjach -
Bieżący katalog.
Jeśli moduł nie zostanie znaleziony, Python przeszukuje następnie każdy katalog w zmiennej powłoki PYTHONPATH.
Jeśli wszystko inne zawiedzie, Python sprawdza domyślną ścieżkę. W systemie UNIX ta domyślna ścieżka to zwykle / usr / local / lib / python /.
Ścieżka wyszukiwania modułu jest przechowywana w systemie modułów sys jako plik sys.pathzmienna. Zmienna sys.path zawiera bieżący katalog, PYTHONPATH i wartość domyślną zależną od instalacji.
PYTHONPATH Variable
PYTHONPATH to zmienna środowiskowa, składająca się z listy katalogów. Składnia zmiennej PYTHONPATH jest taka sama, jak zmiennej powłoki PATH.
Oto typowa PYTHONPATH z systemu Windows -
set PYTHONPATH = c:\python20\lib;
A oto typowa PYTHONPATH z systemu UNIX -
set PYTHONPATH = /usr/local/lib/python
Przestrzenie nazw i zakresy
Zmienne to nazwy (identyfikatory), które są mapowane na obiekty. Nazw jest słownikiem nazw zmiennych (klawisze) i odpowiadających im obiektów (wartości).
Instrukcja Pythona może uzyskać dostęp do zmiennych w lokalnej przestrzeni nazw oraz w globalnej przestrzeni nazw . Jeśli zmienna lokalna i globalna mają taką samą nazwę, zmienna lokalna przesłania zmienną globalną.
Każda funkcja ma własną lokalną przestrzeń nazw. Metody klasowe podlegają tej samej zasadzie określania zakresu, co zwykłe funkcje.
Python zgaduje, czy zmienne są lokalne czy globalne. Zakłada, że każda zmienna, której przypisano wartość w funkcji, jest lokalna.
Dlatego, aby przypisać wartość zmiennej globalnej w ramach funkcji, należy najpierw użyć instrukcji global.
Instrukcja global VarName mówi Pythonowi, że VarName jest zmienną globalną. Python przestaje przeszukiwać lokalną przestrzeń nazw dla zmiennej.
Na przykład definiujemy zmienną Money w globalnej przestrzeni nazw. W funkcji Money przypisujemy Money wartość, dlatego Python przyjmuje Money jako zmienną lokalną. Jednak uzyskaliśmy dostęp do wartości zmiennej lokalnej Money przed jej ustawieniem, więc wynikiem jest UnboundLocalError. Usunięcie komentarzy z instrukcji globalnej rozwiązuje problem.
#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money
Funkcja dir ()
Funkcja wbudowana dir () zwraca posortowaną listę ciągów zawierających nazwy zdefiniowane przez moduł.
Lista zawiera nazwy wszystkich modułów, zmiennych i funkcji, które są zdefiniowane w module. Oto prosty przykład -
#!/usr/bin/python
# Import built-in module math
import math
content = dir(math)
print content
Wykonanie powyższego kodu daje następujący wynik -
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh']
Tutaj, specjalna zmienna łańcuchowa __name__ to nazwa modułu, a __file__ to nazwa pliku, z którego moduł został załadowany.
Te globalne () i mieszkańców () Funkcje
Funkcje globals () i locals () mogą służyć do zwracania nazw w globalnej i lokalnej przestrzeni nazw w zależności od lokalizacji, z której są wywoływane.
Jeśli locals () jest wywoływana z wnętrza funkcji, zwróci wszystkie nazwy, do których można uzyskać dostęp lokalnie z tej funkcji.
Jeśli globals () jest wywoływana z wnętrza funkcji, zwróci wszystkie nazwy, do których można uzyskać dostęp globalny z tej funkcji.
Zwracanym typem obu tych funkcji jest słownik. Dlatego nazwy można wyodrębnić za pomocą funkcji keys ().
Reload () Funkcja
Gdy moduł jest importowany do skryptu, kod znajdujący się w górnej części modułu jest wykonywany tylko raz.
Dlatego jeśli chcesz ponownie wykonać kod najwyższego poziomu w module, możesz użyć funkcji reload () . Funkcja reload () ponownie importuje wcześniej zaimportowany moduł. Składnia funkcji reload () jest następująca -
reload(module_name)
Tutaj nazwa_modułu to nazwa modułu, który chcesz przeładować, a nie ciąg znaków zawierający nazwę modułu. Na przykład, aby ponownie załadować moduł hello , wykonaj następujące czynności -
reload(hello)
Pakiety w Pythonie
Pakiet to hierarchiczna struktura katalogów plików, która definiuje pojedyncze środowisko aplikacji Pythona, które składa się z modułów i podpakietów, podpakietów i tak dalej.
Rozważ plik Pots.py dostępny w katalogu telefonu . Ten plik zawiera następujący wiersz kodu źródłowego -
#!/usr/bin/python
def Pots():
print "I'm Pots Phone"
Podobnie mamy kolejne dwa pliki, które mają różne funkcje i mają taką samą nazwę jak powyżej -
Plik Phone / Isdn.py z funkcją Isdn ()
Plik Phone / G3.py z funkcją G3 ()
Teraz utwórz jeszcze jeden plik __init__.py w katalogu telefonu -
- Phone/__init__.py
Aby wszystkie funkcje były dostępne po zaimportowaniu Phone, musisz umieścić wyraźne instrukcje importu w __init__.py w następujący sposób -
from Pots import Pots
from Isdn import Isdn
from G3 import G3
Po dodaniu tych wierszy do __init__.py wszystkie te klasy będą dostępne podczas importowania pakietu Phone.
#!/usr/bin/python
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
Wykonanie powyższego kodu daje następujący wynik -
I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone
W powyższym przykładzie wzięliśmy przykład pojedynczej funkcji w każdym pliku, ale możesz zachować wiele funkcji w swoich plikach. Możesz także zdefiniować różne klasy Pythona w tych plikach, a następnie możesz tworzyć pakiety z tych klas.