2011-01-23 12 views
36

Los documentos solo dicen que el intérprete de Python realiza "optimizaciones básicas", sin entrar en detalles. Obviamente, depende de la implementación, pero ¿hay alguna manera de hacerse una idea de qué tipo de cosas se pueden optimizar y cuánto ahorro de tiempo de ejecución podría generar?¿Qué hace la optimización de Python (-O o PYTHONOPTIMIZE)?

¿Hay alguna desventaja de usar -O?

Lo único que sé es que -O deshabilita assert, pero presumiblemente uno no debería usar assert para cosas que aún podrían salir mal en la producción.

+1

posible duplicado de [¿Cuál es el uso del modo de optimizaciones básica de Python? ('python -O')] (http://stackoverflow.com/questions/1693088/what-is-the-use-of-pythons-basic-optimizations-mode-python-o) – tzot

Respuesta

45

En Python 2.7, -O producen los siguientes efectos:

Además -OO h como el siguiente efecto:

Para comprobar el efecto de una liberación diferente de CPython, GrEP el código fuente de Py_OptimizeFlag.

Enlace a la documentación oficial: https://docs.python.org/2.7/tutorial/modules.html#compiled-python-files

+1

¿Hay algún inconveniente en el -O marca aparte de faltar en la información de depuración incorporada? – max

+7

He visto muchos módulos de python que suponen que docstrings están disponibles, y se romperían si se utiliza ese nivel de optimización, por ejemplo, en la empresa donde trabajo, sql sin formato se coloca en docstrings y se ejecuta mediante decoradores de funciones (ni siquiera bromeando). Algo menos frecuentemente, 'assert' se usa para realizar funciones lógicas, en lugar de simplemente declarar las expectativas invariables de un punto en el código, por lo que cualquier código como ese también se rompería. – SingleNegationElimination

+1

@max: si revisa la lista completa de cambios semánticos anterior, ¿considera que alguno de ellos es un "inconveniente"? Si no, no hay desventajas. Personalmente, considero una desventaja que el nombre de los archivos de códigos de bytes cambie, ya que contribuye al desorden del disco. Tenga en cuenta que "la información de depuración incorporada faltante" es * no * en la lista; pdb sigue funcionando bien (este no fue el caso en las versiones anteriores de Python, donde -O dejó de admitir el paso único en pdb). –

Cuestiones relacionadas