64 votes

Bonne ou mauvaise pratique en Python: importer au milieu d'un fichier

Supposons que j'ai un module relativement long, mais que je n'ai besoin d'un module externe ou d'une méthode qu'une seule fois.

Est-il considéré comme acceptable d'importer cette méthode ou ce module au milieu du module?

Ou bien les import s ne doivent être que dans la première partie du module.

Exemple:

 import string, pythis, pythat
...
...
...
...
def func():
     blah
     blah 
     blah
     from pysomething import foo
     foo()
     etc
     etc 
     etc
...
...
...
 

Veuillez justifier votre réponse et ajouter des liens vers des PPE ou des sources pertinentes

65voto

Alex Martelli Points 330805

PEP 8 avec autorité les états:

Les importations sont toujours mis au-dessus de le fichier, juste après n'importe quel module les commentaires et les docstrings, et avant de module globals et constantes.

PEP 8 devrait être la base de tout "in-house" guide de style, car il résume ce que les core Python équipe a trouvé pour être le plus efficace, le style, en général (individuel de la dissidence, bien sûr, comme toute autre langue, mais le consensus et la BDFL d'accord sur la PEP 8).

28voto

ire_and_curses Points 32802

Une discussion détaillée de ce sujet a été faite sur la liste de diffusion Python en 2001:

http://mail.python.org/pipermail/python-list/2001-July/097838.html

L'URL semble avoir changé

http://mail.python.org/pipermail/python-list/2001-July/097194.html

20voto

Mark Rushakoff Points 97350

Tout le monde a déjà mentionné les PEP, mais veillez également à ne pas avoir d'instructions d'importation au milieu d'un code critique. Au moins sous Python 2.6, plusieurs instructions bytecode supplémentaires sont nécessaires lorsqu'une fonction a une instruction import.

 >>> def f():
    from time import time
    print time()

>>> dis.dis(f)
  2           0 LOAD_CONST               1 (-1)
              3 LOAD_CONST               2 (('time',))
              6 IMPORT_NAME              0 (time)
              9 IMPORT_FROM              0 (time)
             12 STORE_FAST               0 (time)
             15 POP_TOP             

  3          16 LOAD_FAST                0 (time)
             19 CALL_FUNCTION            0
             22 PRINT_ITEM          
             23 PRINT_NEWLINE       
             24 LOAD_CONST               0 (None)
             27 RETURN_VALUE

>>> def g():
    print time()

>>> dis.dis(g)
  2           0 LOAD_GLOBAL              0 (time)
              3 CALL_FUNCTION            0
              6 PRINT_ITEM          
              7 PRINT_NEWLINE       
              8 LOAD_CONST               0 (None)
             11 RETURN_VALUE
 

12voto

Blauohr Points 3279

Si le module importé est peu utilisé et que l'importation est coûteuse, l'importation au centre est OK.

Sinon, est-il sage de suivre la suggestion d'Alex Martelli.

7voto

Frozenskys Points 2203

Il est considéré comme "Bonne Forme" pour regrouper toutes les importations ensemble au début du fichier.

Les Modules peuvent importer d'autres modules. Il est de coutume, mais pas à la place de toutes les déclarations d'importation au début d'un module (ou d'un script, d'ailleurs). Le module importé noms sont placés dans le module d'importation mondial de la table des symboles.

À partir d'ici: http://docs.python.org/tutorial/modules.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X