Python: les importations au début du programme principal et PEP 8
Question
PEP 8 recommande que les modules d'importer au début des programmes.
Maintenant, je pense que l'importation certains d'entre eux au début du programme (à savoir, après if __name__ == '__main__'
) principal est logique. Par exemple, si le programme principal lit les arguments de la ligne de commande, je tends à faire import sys
au début de la principale programme: cette façon, sys
ne doit pas être importé lorsque le code est utilisé comme un module, car il n'y a pas besoin, dans ce cas, pour l'accès des arguments de ligne de commande.
Quelle est la gravité de cette infraction PEP 8? de faire ce que je devrais éviter? ou serait-il raisonnable de modifier PEP 8?
La solution
Je ne peux pas vraiment vous dire à quel point cela est de faire.
Cependant, j'ai grandement amélioré leurs performances (temps de réponse, charge) pour une application Web en important certaines bibliothèques uniquement lors de la première utilisation.
BTW, ce qui suit est également de PEP 8:
Mais le plus important: savoir quand être incompatibles - parfois le style guide ne vient pas applicable. Quand à doute, utilisez votre meilleur jugement. Regardez à d'autres exemples et de décider semble la meilleure. Et ne pas hésiter à demandez!
Autres conseils
En général, je ne pense pas qu'il y ait beaucoup de mal à l'importation en retard pour les modules qui peuvent ne pas être nécessaires.
Cependant sys
je serais certainement importer tôt, en haut. Il est un module commun qu'il est tout à fait probable que vous pouvez utiliser sys ailleurs dans votre script et ne pas remarquer qu'il est pas toujours importé. sys
est également l'un des modules qui obtient toujours chargés par Python lui-même, de sorte que vous n'êtes pas enregistrer les temps de démarrage du module en évitant l'importation (pas qu'il ya beaucoup de démarrage pour sys de toute façon).
Je vous recommande de faire ce que vous ressentez est le plus approprié quand il n'y a rien dans le PEP au sujet de votre préoccupation.
Importation sys ne prend pas vraiment si longtemps que je vous en inquiéter. Certains modules ne prennent plus de temps cependant. Je ne pense pas vraiment sys obstrue l'espace de noms très bien. Je ne voudrais pas utiliser une variable appelée ou classe sys quel que soit.
Si vous pensez qu'il fait plus de mal que de bien l'avoir en haut, par tous les moyens le faire comme bon vous semble. PEP 8 est juste une ligne de guidage et beaucoup de code que vous voyez ne se conforme pas.
La question n'est pas la performance.
La question est claire.
Votre programme « principal » est seulement un programme principal aujourd'hui. Demain, il peut être une bibliothèque inclus dans certains programme principal de niveau supérieur. Plus tard, il sera juste un module dans un plus grand ensemble.
Depuis votre vie du programme « principal » peut changer, vous avez deux réponses.
-
Isoler les choses à l'intérieur
if __name__ == "__main__"
"principales". Ce n'est pas une violation grotesque du PEP-8. Ceci est une façon raisonnable d'emballer les choses. -
Essayez de limiter le nombre de fonctionnalités dans vos scripts de programme « principaux ». Essayez de les garder jusqu'à
import
s et les trucs deif __name__ == "__main__"
. Si votre script principal est petit, votre question à l'importation va.