Zanurkuj w Pythonie/Dynamiczne importowanie modułów: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m Nowa strona: {{Python/Do tłumaczenia}} {{Podświetl|py}} == Dynamically importing modules == OK, enough philosophizing. Let's talk about dynamically importing modules. First, let's look at how y... |
|||
Linia 2:
{{Podświetl|py}}
== Dynamiczne importowanie modułów ==
OK, dość filozofowania. Pogadajmy o dynamicznym importowaniu modułów.
Najpierw zerknijmy jak normalnie importuje się moduły. Składnia polecenia import module sprawdza ścieżkę w poszukiwaniu nazwanego modułu i importuje go po nazwie. W ten sposób można importować kilka modułów na raz, podając nazwy modułów oddzielone przecinkiem. Z resztą, robiłeś już to w pierwszej linii skryptu z tego rozdziału.
import sys, os, re, unittest #(1)
#
A teraz zróbmy to samo, jednak przy użyciu dynamicznego importowania.
'''
>>> sys = __import__('sys') #(1)
Linia 27:
>>> <module 'os' from '/usr/local/lib/python2.2/os.pyc'>
#
#
Reasumując, __import__ importuje moduł, jednak aby tego dokonać, pobiera jako argument ciąg znaków. W tym przypadku moduł, który zaimportowałeś był po prostu na sztywno zakodowanym ciągiem znaków, jednak nic nie stało na przeszkodzie, aby była to zmienna, lub wynik działania funkcji. Zmienna, pod którą podstawiasz moduł, nie musi się nazywać tak samo jak nazwa modułu, który importujesz. Równie dobrze mógłbyś zaimportować szereg modułów i przypisać je do listy.
'''
>>> moduleNames = ['sys', 'os', 're', 'unittest'] #(1)
Linia 49:
'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
# moduleNames jest po prostu listą stringów. Nic nadzwyczajnego, za wyjątkiem tego, że akurat te stringi są nazwami modułów, które mógłbś zaimportować, jeśli byś chciał.
# Wyobraż sobie, że chciałeś je zaimportować, a dokonałeś tego poprzez mapowanie funkcji __import__ na listę. Pamiętaj jednak, że każdy element listy (moduleNames) będzie przekazany jako argument do wywołania raz za razem funkcji (__import__), budując w ten sposób listę zwróconych wartości i zwraca wynik.
# Tak więc z listy stringów stworzyłeś tak na prawdę listę rzeczywistych modułów. (Twoje ścieżki mogą się różnić w zależności od systemu operacyjnego, na którym zainstalowałeś Pythona, faz księżyca i tam takich innych.)
#
Teraz już powinieneś móc wszystko to poskładać do kupy i rozszyfrować o co tak na prawdę chodzi w kodzie zamieszczonych tutaj przykładów.
|