Zanurkuj w Pythonie/Dwa sposoby importowania modułów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
== Dwa sposoby importowania modułów ==
== Importowanie modułów za pomocą <code>from module import</code> ==
 
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 <code>import nazwa_modulumodule</code>, który mogliśmy zobaczyć w [[../Twój pierwszy program#Wszystko jest obiektem|Podrozdziale 2.4,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ę <code>from module import</code>:
 
from UserDictapihelper import UserDictinfo
 
Jak widzimy, składnia tego wyrażenia jest bardzo podobna do <code>import nazwa_modulumodule</code>, ale z jedną ważną różnicą: atrybuty i metody danego modułu są importowane bezpośrednio do lokalnej przestrzeni nazw, taka 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 <code>from module import *</code>, aby zaimportować wszystko.
 
{{Infobox|1=<code>from module import *</code> w Pythonie przypomina <code class="lang-pl">use module</code> w Perlu, a Pythonowe <code>import module</code> przypomina Perlowskie <code>require module</code>.
}}
 
{{Infobox|<code>from module import *</code> w Pythonie jest analogią do <code>import module.*</code> w Javie, a <code>import module</code> w Pythonie przypomina <code>import module</code> w Javie.}}
 
{{Python/Przykład
|54.2x|Różnice między <code>import module</code> a <code>from module import</code>
|tekst=
>>> import types
Linia 18 ⟶ 19:
{{samp|<type 'function'>}}
>>> FunctionType #(2)
{{sampErr|Traceback (innermostmost recent call last):
File "<interactive inputstdin>", line 1, in ?
NameError: Therename 'FunctionType' is nonot variable named 'FunctionType'defined}}
>>> from types import FunctionType #(3)
>>> FunctionType #(4)
{{samp|<type 'function'>}}
 
# Moduł <code>types</code> 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 <code>FunctionType</code>) musi być poprzedzony nazwą modułu -- <code>types</code>.
# <code.>FunctionType</code> nie został sam w sobie określony w przestrzeni nazw; istnieje on tylko w kontekście modułu <code>types</code>.
# Za pomocą tego wyrażenia atrybut <code>FunctionType</code> z modułu <code>types</code> został zaimportowany bezpośrednio do lokalnej przestrzeni nazw.
# Teraz możemy odwoływać się bezpośrednio do <code>FunctionType</code>, bez odwoływania się do <code>types</code>.
Linia 34 ⟶ 35:
* Kiedy często odwołujemy się do atrybutów i metod, a nie chcemy wielokrotnie wpisywać nazwy modułu, wtedy najlepiej wykorzystać <code>from module import</code>.
* Jeśli potrzebujemy selektywnie zaimportować tylko kilka atrybutów lub metod, powinniśmy skorzystać z <code>from module import</code>.
* Jeśli moduł zawiera atrybuty lub metody, które posiadają taką samą nazwę jaka jest w naszym module, powinniśmy wykorzystać <code>import nazwa_modulumodule</code>, aby uniknąć konfliktu nazw.
 
W pozostałych przypadkach to kwestia stylu programowania, można spotkać kod napisany obydwoma sposobami.