Python - importation dans si
J'ai écrit il y a peu de wrapper pour urllib (python3). Est-il bon et sûr pour le module d'importation si?
if self.response_encoding == 'gzip':
import gzip
Je n'ai pas trouvé PEP à propos de ce code. Cependant, il m'ennuie.
- juste être sûr de ne pas appeler n'importe quelle fonction à venir à partir de ce logiciel s'il n'est pas importé
- Oui, il est. Pourquoi ça vous dérange?
- Je voulais vous demander et être sûr. Je devrais peut-être utiliser "inquiet" mot. L'anglais n'est pas ma langue maternelle.
- Il dérange les gens, je pense, parce que dans d'autres langues, des constructions similaires à "importer" sont statiques déclarations, alors qu'en python elles sont exécutables. Une astuce: Vous pouvez faire 'a partir de x import *' à l'intérieur d'une fonction. Mais ne le faites pas. Parce que cela signifie que la fonction a maintenant une variable locale ensemble qui ne peut pas être déterminé lorsque la fonction est compilé, la touche func a différents éléments internes qui sont messier et plus lent, et local vars peut être touchée. (même si vous faites un "exec" dans un func sans l'aide de 'in'). Ces usages sont obsolètes.
Vous devez vous connecter pour publier un commentaire.
Le Python de la bibliothèque standard utilise, donc c'est très certainement correcte et sûre. Voir la
os
module de source pour un excellent exemple:Il est assez commun pour conditionnellement à l'importation des modules en python. Au lieu de
if
, vous verrez souvent untry:
/except ImportError:
combinaison trop:Ici, on utilise essentiellement l'équivalent moral d'une
if
test: Si vous pouvez importercheck_output
, le faire, sinon de définir la fonction complète ici.Une instruction d'importation est juste un re-liaison d'un morceau de code pour un nom local. À l'aide d'un
if
flux de contrôle pour le contrôle de l'importation n'est pas différente de l'affectation d'une variable dans uneif
déclaration à cet égard. Vous devez assurez-vous de ne pas utiliser le nom, sans qu'il soit défini à l'autre.try/except ImportError
était mon premier instinct de répondre à cette question ainsi.C'est assez commun de l'idiome en fait. Vous allez voir parfois de choisir entre différents modules:
Ensuite, en supposant que les deux
linuxdeps
etwin32deps
ont les mêmes fonctions, vous pouvez simplement l'utiliser:C'est même utilisée pour obtenir
os.path
dans la bibliothèque standard (une partie du code source pouros
suit):Sûr, c'est très bien. Il peut même être nécessaire dans les cas où le module a du code d'initialisation que vous n'avez pas toujours envie de courir.
Est-il sûr? Oui. Comme Martijin réponse a souligné que Officiel de Python d'utilisation de ce.
Est-il adéquat? Dépend. Python performance docs souligne que, même si python peut éviter d'importer le même module, il y a toujours une surcharge.
Donc, je crois que vous devriez vous poser, comment souvent si l'énoncé est vrai. Si très souvent, alors il sera grand frais généraux, et vous devez l'importer au début du fichier. Si pas souvent, puis les importer dans si l'état est un choix judicieux.