Quelles sont les implications de lancer python avec le flag optimize?

Je n'arrive pas à trouver une bonne explication simple de ce que python fait différemment lorsqu'il exécute avec le-O ou optimise flag.

28
demandé sur kkubasik 2010-05-14 01:14:38
la source

4 ответов

assert les instructions sont complètement éliminées, tout comme les blocs d'instructions de la forme if __debug__: ... (de sorte que vous pouvez mettre votre code de débogage dans ces blocs d'instructions et juste exécuter avec -O pour éviter que le code de débogage).

avec -OO , en outre, docstrings sont également éliminés.

23
répondu Alex Martelli 2010-05-14 01:23:27
la source

à Partir de les docs :

quand L'interpréteur Python est invoqué avec le drapeau-O, le code optimisé est générés et stockés dans .dossiers pyo. L'optimiseur actuellement n'aide pas beaucoup; il supprime seulement affirmer déclaration. Lorsque -O est utilisé, tous le bytecode est optimisée .les fichiers pyc sont ignoré et .les fichiers py sont compilés pour optimisé bytecode.

passant les drapeaux à deux O au Python l'interprète (- OO) provoquera la compilateur de bytecode pour effectuer des optimisations qui pourraient dans quelques rares cas entraînant un dysfonctionnement programme. Actuellement seulement __doc__ les chaînes sont retirées du bytecode, résultant en plus compact .dossiers pyo. Étant donné que certains programmes peuvent compter sur ces disponibles, vous ne devez utiliser cette option si vous savez ce que vous êtes faire.

un programme ne fonctionne pas plus vite quand il est lu à partir d'un .pyc ou .fichier pyo que lorsqu'il est lu à partir d'un .py fichier; la seule chose qui est plus rapide sur .pyc ou .pyo fichiers est la vitesse avec dont ils sont chargés.

donc en d'autres termes, presque rien.

23
répondu ire_and_curses 2010-06-10 17:36:19
la source

à Partir de Qu'est-O drapeau?

cela dépend un peu du Python version. Pour savoir précisément ce qu'il n', recherchez le code source pour Py_OptimizeFlag. En 2.5, it

  • fait charger l'interpréteur .pyo fichiers, pas .pyc les fichiers (.les fichiers zip, tout à fait .pyo préférait .pyc)
  • fait que __debug__ a une valeur de 0
  • ignore affirmer énoncés dans le code source de
  • traite __debug__ statiquement comme étant 0
  • permet au générateur de code de sauvegarder .pyo fichiers, pas .pyc
7
répondu joaquin 2010-06-10 17:37:01
la source

Comme réponse à python optimisation de la mode :

python-O fait actuellement ce qui suit:

  • ne tient aucun compte des affirmations
  • définit le nom de construction spécial __debug__ à False (qui par défaut est True)

et quand on l'appelle comme python -OO

  • supprime docstrings du code

Je ne sais pas pourquoi tout le monde oublie de mentionner la question __debug__ ; peut-être est-ce parce que je suis le seul à l'utiliser :) une construction if __debug__ ne crée aucun bytecode lors de l'exécution sous -O , et je trouve cela très utile.

5
répondu tzot 2017-05-23 14:55:07
la source

Autres questions sur