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)
#
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
'''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>),
# 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>
Teraz już
|