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

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
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 ==
== Dynamically importing modules ==
 
OK, dość filozofowania. Pogadajmy o dynamicznym importowaniu modułów.
OK, enough philosophizing. Let's talk about dynamically importing modules.
 
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.
First, let's look at how you normally import modules. The import module syntax looks in the search path for the named module and imports it by name. You can even import multiple modules at once this way, with a comma-separated list. You did this on the very first line of this chapter's script.
ExamplePrzykład 16.13. ImportingImportowanie multiplewielu modulesmodułów atna onceraz
 
 
import sys, os, re, unittest #(1)
 
# ThisImportuje importsna fourraz modulescztery at oncemoduły: sys (forfunkcje systemsystemowe functionsoraz anddostępu accessdo toparametrów theprzekazywanych commandz linelinii parameterspoleceń), os (forwykonywanie operatingfunkcji systemsystemowych functionstakich likejak directorynp. listingslistowanie katalogów), re (forwyrażenia regular expressionsregularne), andoraz unittest (for unit testingtesty).
 
A teraz zróbmy to samo, jednak przy użyciu dynamicznego importowania.
Now let's do the same thing, but with dynamic imports.
 
'''ExamplePrzykład 16.14. ImportingDynamiczne modulesimportowanie dynamicallymodułów'''
 
>>> sys = __import__('sys') #(1)
Linia 27:
>>> <module 'os' from '/usr/local/lib/python2.2/os.pyc'>
 
# TheWbudowana built-infunkcja __import__ functionrobi accomplishesto thesamo sameco goalużycie as using thepolecenia import statement, butjednak it'sjest anto actualfunkcja functionrzeczywista, and it takesktóra aprzyjmuje stringciąg asznaków anjako argument.
# The variableZmienna sys isstaje nowsię themodułem sys module, justto astak ifjakby you had saidnapisać import sys. The variableZmienna os isstaje nowsię themodułem os module, andi sotak forthdalej.
 
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.
So __import__ imports a module, but takes a string argument to do it. In this case the module you imported was just a hard-coded string, but it could just as easily be a variable, or the result of a function call. And the variable that you assign the module to doesn't need to match the module name, either. You could import a series of modules and assign them to a list.
 
'''ExamplePrzykład 16.15. ImportingDynamiczne aimportowanie listlisty of modules dynamicallymodułów'''
 
>>> 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ł.
# moduleNames is just a list of strings. Nothing fancy, except that the strings happen to be names of modules that you could import, if you wanted to.
# 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.
# Surprise, you wanted to import them, and you did, by mapping the __import__ function onto the list. Remember, this takes each element of the list (moduleNames) and calls the function (__import__) over and over, once with each element of the list, builds a list of the return values, and returns the result.
# 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.)
# So now from a list of strings, you've created a list of actual modules. (Your paths may be different, depending on your operating system, where you installed Python, the phase of the moon, etc.)
# ToAby driveupewnić homesię, theże point thatto thesetak arena realprawdę modulesmoduły, let'szerknijmy lookna atniektóre someich module attributesatrybuty. RememberPamiętaj, że modules[0] isjest themodułem sys module, sowięc modules[0].version isjest sys.version. AllWszystkie thepozostałe otheratrybuty attributesi andmetody methodstych ofmodułów these modulestakże aredostępne. alsoNie available.ma There'snic nothingniezwykłego magicw about thepoleceniu import statement, andtak there'ssamo nothingjak magicnie aboutma modules.nic Modulesmagicznego arew objectsmodułach. EverythingModuły są obiektami. isWszystko anjest objectobiektem.
 
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.
Now you should be able to put this all together and figure out what most of this chapter's code sample is doing.