Zanurkuj w Pythonie/Dwa sposoby importowania modułów
Dwa sposoby importowania modułów
[edytuj]W Pythonie mamy dwa sposoby importowania modułów. Obydwa są przydatne, dlatego też powinniśmy umieć je wykorzystywać. Jednym ze sposobów jest użycie polecenia import module
, który mogliśmy zobaczyć w podrozdziale "Wszystko jest obiektem". Istnieje inny sposób, który realizuje tę samą czynność, ale posiada pewne różnice. Poniżej został przedstawiony przykład wykorzystujący instrukcję from module import
:
from apihelper import info
Jak widzimy, składnia tego wyrażenia jest bardzo podobna do import module
, ale z jedną ważną różnicą: atrybuty i metody danego modułu są importowane bezpośrednio do lokalnej przestrzeni nazw, a więc będą dostępne bezpośrednio i nie musimy określać, z którego modułu korzystamy. Możemy importować określone pozycje albo skorzystać z from module import *
, aby zaimportować wszystko.
from module import * w Pythonie przypomina use module w Perlu, a Pythonowe import module przypomina Perlowskie require module .
|
from module import * w Pythonie jest analogią do import module.* w Javie, a import module w Pythonie przypomina import module w Javie.
|
import module
a from module import
>>> import types >>> types.FunctionType #(1) <type 'function'> >>> FunctionType #(2) Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'FunctionType' is not defined >>> from types import FunctionType #(3) >>> FunctionType #(4) <type 'function'>
- Moduł
types
nie posiada żadnych metod. Posiada on jedynie atrybuty określające wszystkie typy zdefiniowane przez Pythona. Zauważmy, że atrybut tego modułu (w tym przypadkuFunctionType
) musi być poprzedzony nazwą modułu --types
. FunctionType
nie został sam w sobie określony w przestrzeni nazw; istnieje on tylko w kontekście modułutypes
.- Za pomocą tego wyrażenia atrybut
FunctionType
z modułutypes
został zaimportowany bezpośrednio do lokalnej przestrzeni nazw. - Teraz możemy odwoływać się bezpośrednio do
FunctionType
, bez odwoływania się dotypes
.
Kiedy powinniśmy używać from module import
?
- Kiedy często odwołujemy się do atrybutów i metod, a nie chcemy wielokrotnie wpisywać nazwy modułu, wtedy najlepiej wykorzystać
from module import
. - Jeśli potrzebujemy selektywnie zaimportować tylko kilka atrybutów lub metod, powinniśmy skorzystać z
from module import
. - Jeśli moduł zawiera atrybuty lub metody, które posiadają taką samą nazwę jaka jest w naszym module, powinniśmy wykorzystać
import module
, aby uniknąć konfliktu nazw.
W pozostałych przypadkach to kwestia stylu programowania, można spotkać kod napisany obydwoma sposobami.
Używajmy from module import * oszczędnie, ponieważ taki sposób importowania utrudnia określenie, skąd pochodzi dana funkcja lub atrybut, a to z kolei utrudnia debugowanie.
|
Materiały dodatkowe
[edytuj]- eff-bot opowie nam więcej na temat różnic między
import module
afrom module import
. - Python Tutorial omawia zaawansowane techniki importu, włączając w to
from module import *
.