En Ruby, au lieu de répéter le mot "require" ("importer" en Python) Word souvent, je le fais
%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }
Il itère donc sur l'ensemble des "libs" et "requiert" (importe) chacun d'eux. Maintenant, j'écris un script Python et je voudrais faire quelque chose comme ça.
La "traduction" simple serait quelque chose comme le code suivant. Quoi qu'il en soit, puisque Python n'importe pas les bibliothèques nommées sous forme de chaînes, cela ne fonctionne pas.
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
import lib
Merci d'avance
Pour les modules connus, séparez-les simplement par des virgules:
import lib1, lib2, lib3, lib4, lib5
Si vous avez vraiment besoin d'importer par programme sur la base de variables dynamiques, une traduction littérale de votre Ruby serait:
modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
globals()[lib] = __import__(lib)
Bien que cela ne soit pas nécessaire dans votre exemple.
Essaye ça:
import lib1, lib2, lib3, lib4, lib5
Vous pouvez également changer le nom sous lequel ils sont importés de cette manière, comme ceci:
import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5
import lib1, lib2, lib3, lib4, lib5
Vous pouvez importer à partir d'une chaîne contenant le nom de votre module en utilisant __import__
fonction.
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
x = __import__(lib)
Vous pouvez utiliser __import__
si vous avez une liste de chaînes qui représentent des modules, mais c'est probablement plus propre si vous suivez les conseils dans la documentation et utilisez importlib.import_module
directement:
import importlib
requirements = [lib1, lib2, lib3, lib4, lib5]
imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
Vous n'avez pas les bibliothèques importées comme variables disponibles de cette façon, mais vous pouvez y accéder via le imported_libs
dictionnaire:
>>> requirements = ['sys', 'itertools', 'collections', 'pickle']
>>> imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
>>> imported_libs
{'collections': <module 'collections' from 'lib\\collections\\__init__.py'>,
'itertools': <module 'itertools' (built-in)>,
'pickle': <module 'pickle' from 'lib\\pickle.py'>,
'sys': <module 'sys' (built-in)>}
>>> imported_libs['sys'].hexversion
50660592
Vous pouvez également mettre à jour votre globals
puis les utiliser comme ils ont été importés "normalement":
>>> globals().update(imported_libs)
>>> sys
<module 'sys' (built-in)>