while simbolos significa relacionales que operadores not else ejemplos bucles python conditional-compilation

significa - simbolos en python



CompilaciĆ³n condicional en Python (6)

¿Cómo hacer una compilación condicional en Python?

¿Está usando DEF?


De hecho, hay una forma de obtener una compilación condicional, pero es muy limitada.

if __debug__: doSomething()

La bandera __debug__ es un caso especial. Al llamar a python con las opciones -O o -OO , __debug__ será falso y el compilador ignorará esa declaración. Esto se usa principalmente con las afirmaciones, que es por lo que las afirmaciones desaparecen si realmente compila sus scripts con optimización.

Por lo tanto, si su objetivo es agregar código de depuración, pero evitar que se ralentice o que afecte a una compilación de ''lanzamiento'', esto hará lo que usted desee. Pero no puedes asignar un valor a __debug__ , así que eso es todo lo que puedes usar.


No tiene mucho sentido en un entorno dinámico. Si busca una definición condicional de funciones, puede usar if :

if happy: def makemehappy(): return "I''m good"


Python compila un módulo automáticamente cuando lo importa, por lo que la única forma de evitar la compilación es no importarlo. Puedes escribir algo como:

if some_condition: import some_module

Pero eso solo funcionaría para módulos completos. En C y C ++ normalmente utiliza un preprocesador para la compilación condicional. No hay nada que te impida usar un preprocesador en tu código de Python, por lo que podrías escribir algo como:

#ifdef SOME_CONDITION def some_function(): pass #endif

Ejecuta eso a través de un preprocesador C y obtendrás una compilación condicional real y solo se definirá SOME_CONDITION función si se define SOME_CONDITION .

PERO (y esto es importante): la compilación condicional probablemente no es lo que quieres. Recuerde que cuando importa un módulo, Python simplemente ejecuta el código en él. Las sentencias def y class en el módulo se ejecutan cuando se importa el módulo. Entonces, la forma típica de implementar lo que otros lenguajes usarían para la compilación condicional es solo una declaración if normal, como:

if some_condition: def some_function(): pass

Esto solo definirá some_condition si some_condition es verdadera.

Son cosas como esta que hacen que los lenguajes dinámicos sean tan poderosos a la vez que conceptualmente simples.


Python no se compila en el mismo sentido que C o C ++ o incluso Java, los archivos python se compilan "sobre la marcha", se puede pensar que es similar a un lenguaje interpretado como Basic o Perl. 1

Puede hacer algo equivalente a la compilación condicional simplemente usando una instrucción if. Por ejemplo:

if FLAG: def f(): print "Flag is set" else: def f(): print "Flag is not set"

Puedes hacer lo mismo para las clases de creación, configuración de variables y casi todo.

La forma más cercana de imitar a IFDEF sería usar la función hasattr. P.ej:

if hasattr(aModule, ''FLAG''): # do stuff if FLAG is defined in the current module.

También podría usar una cláusula try / except para detectar errores de nombre, pero la forma idiomática sería establecer una variable en None en la parte superior de su script.

  1. El código de Python se compila en bytes en una forma intermedia como Java, sin embargo, generalmente no hay un paso de compilación por separado. Los archivos fuente "en bruto" que terminan en .py son ejecutables.

Usar pypreprocessor

Que también se puede encontrar en PYPI (Python Package Index) y se puede buscar usando pip.

El ejemplo básico de uso es:

from pypreprocessor import pypreprocessor pypreprocessor.parse() #define debug #ifdef debug print(''The source is in debug mode'') #else print(''The source is not in debug mode'') #endif

También puede enviar el código posprocesado a un archivo especificando ...

pypreprocessor.output = ''output_file_name.py''

en cualquier lugar entre la importación del pypreprocessor y la llamada a parse ().

El módulo es esencialmente la implementación python de la compilación condicional del preprocesador C.

SideNote: Esto es compatible con python2x y python 3k

Descargo de responsabilidad: soy el autor de pypreprocessor

Actualizar:

Olvidé mencionarlo antes. A diferencia de los enfoques if / else o if _debug: descritos en otras respuestas, este es un verdadero preprocesador. El bytecode producido no contendrá el código que está excluido condicionalmente.