Zanurkuj w Pythonie/Dynamiczne importowanie modułów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Usuniety znacznik - Do tlumaczenia
m Dodane znaczniki tt, poprawka literówki
Linia 5:
 
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ą, robiliśmy już to w pierwszej linii skryptu z tego rozdziału.
 
'''Przykład 16.13. Importowanie wielu modułów na raz'''
 
 
import sys, os, re, unittest #(1)
 
# ImportujeImportowane na raz cztery moduły na raz: sys (funkcje systemowe oraz dostępu do parametrów przekazywanych z linii poleceń), os (wykonywanie funkcji systemowych takich jak np. listowanie katalogów), re (wyrażenia regularne), oraz unittest (unit testy jednostkowe).
 
A teraz zróbmy to samo, jednak przy użyciu dynamicznego importowania.
Linia 28 ⟶ 29:
# Zmienna sys staje się modułem sys, to tak jakby napisać import sys. Zmienna os staje się modułem os i tak dalej.
 
Reasumując, __import__ importuje moduł, jednak aby tego dokonać, pobiera jako argument ciąg znaków. W tym przypadku moduł, który zaimportowaliśmy 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ą podstawiamy moduł, nie musi się nazywać tak samo jak nazwa modułu, który importujemy. Równie dobrze moglibyśmy zaimportować szereg modułów i przypisać je do listy.
 
'''Przykład 16.15. Dynamiczne importowanie listy modułów'''
Linia 47 ⟶ 48:
'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
 
# <tt>moduleNames</tt> jest po prostu listą ciągów znaków. Nic nadzwyczajnego, za wyjątkiem tego, że akurat te ciągi znaków są nazwami modułów, które moglibyśmy zaimportować, jeśli byśmy chcieli.
# Wyobraźmy sobie, że chcieliśmy je zaimportować, a dokonaliśmy tego poprzez mapowanie funkcji <tt>__import__</tt> na listę. Pamiętajmy jednak, że każdy element listy (<tt>moduleNames</tt>) będzie przekazany jako argument do wywołania raz za razem funkcji (<tt>__import__</tt>), budującdzięki wczemu tenzostanie sposóbzbudowana listęi zwróconychzwrócona lista wartości i zwraca wynik.wynikowych
# Tak więc z listy ciągów znaków stworzyliśmy tak na prawdę listę rzeczywistych modułów. (Nasze ścieżki mogą się różnić w zależności od systemu operacyjnego, na którym zainstalowaliśmy Pythona, faz księżyca i innych takich tam.)
# Aby upewnić się, że są to tak na prawdę moduły, zerknijmy na niektóre ich atrybuty. Pamiętajmy, że <tt>modules[0]</tt> jest modułem sys, więc <tt>modules[0].version</tt> jestodpowiada sys.version. Wszystkie pozostałe atrybuty i metody tych modułów są także dostępne. Nie ma nic niezwykłego w poleceniu import, tak samo jak nie ma nic magicznego w modułach. Moduły są obiektami. Wszystko jest obiektem.
 
Teraz już powininniśmypowinniśmy móc wszystko to poskładać do kupy i rozszyfrować o co tak na prawdę chodzi w kodzie zamieszczonych tutaj przykładów.