Zanurkuj w Pythonie/Dwa sposoby importowania modułów
Dwa sposoby importowania modułów
edytujW 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 *
.