Zanurkuj w Pythonie/Dwa sposoby importowania modułów

Z Wikibooks, biblioteki wolnych podręcznikó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.

Przykład. Różnice między 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'>
  1. 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 przypadku FunctionType) musi być poprzedzony nazwą modułu -- types.
  2. FunctionType nie został sam w sobie określony w przestrzeni nazw; istnieje on tylko w kontekście modułu types.
  3. Za pomocą tego wyrażenia atrybut FunctionType z modułu types został zaimportowany bezpośrednio do lokalnej przestrzeni nazw.
  4. Teraz możemy odwoływać się bezpośrednio do FunctionType, bez odwoływania się do types.

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.

Materiały dodatkowe[edytuj]