Comment puis-je importer variable paquets Python comme l'utilisation de variables ($$) en PHP?
Je veux importer un paquet en fonction de la valeur choisie par l'utilisateur.
La valeur par défaut est file1.py
:
from files import file1
Si l'utilisateur choisit le file2
, il convient de :
from files import file2
En PHP, je peux le faire à l'aide de les variables:
$file_name = 'file1';
include($$file_name);
$file_name = 'file2';
include($$file_name);
Comment puis-je le faire en Python?
- Ne faites pas cela! Utilisez l'entrée n'est généralement pas digne de confiance et l'aveuglement de l'évaluation de code basé sur elle une mauvaise idée.
- merci, je suis en utilisant la valeur par défaut définie pour importer maintenant.
Vous devez vous connecter pour publier un commentaire.
Python ne dispose pas d'une fonctionnalité qui est directement équivalent à PHP "variables". Pour obtenir une variable "variable"de la valeur (ou la valeur de toute autre expression), vous pouvez utiliser le
eval
fonction.Cependant, cela ne peut pas être utilisé dans un
import
déclaration.Il est possible d'utiliser le
__import__
de la fonction d'importation à l'aide d'une variable.est équivalent à
Vieux thread, mais j'ai besoin de la réponse, si quelqu'un d'autre pourrait quand même...
Il y a une manière plus propre de le faire en Python 2.7+:
package.path.__init__.py
pour import fonctionne à tous.Comme Fredrik Lundh états:
Et par la façon dont c'est la dernière méthode que vous êtes intéressé par l'.
Simplement écrire (par exemple):
En me basant sur les
mattjbray
's réponse:Permet d'économiser quelques lignes de code, et permet de définir des
safe_names
de la programmation, ou de charger de multiples modules et de les affecter à une dict, par exemple.C'est probablement une très mauvaise idée de permettre à l'utilisateur de choisir les éléments à importer. Les paquets peuvent exécuter du code sur l'importation, de sorte que vous êtes effectivement en permettant à un utilisateur d'exécuter du code arbitraire sur le système! Beaucoup plus sûr de faire quelque chose comme