How to mimic C's #define functionality to optionally print debug output in Python?
c, debugging, preprocessor-directive, python
Solution
Python has no direct equivalent of C's macros because it has no preprocessor and does not distinguish between compile-time and run-time like C does.
A simple solution however is to put your `print` lines inside an if-statement:
if False:
print(...)
print(...)
print(...)
...
You can then just change the `False` to `True` to have them be executed.
Similarly, you could do:
DEBUG = False
if DEBUG:
print(...)
print(...)
print(...)
...
and then change the `DEBUG` name to `True`.
A third (and probably the best) option would be to use Python's built-in `__debug__` flag:
if __debug__:
print(...)
print(...)
print(...)
...
`__debug__` is a constant like `None` and is set to `True` if Python is launched without a `-O` option (it is in debug mode). Otherwise, if a `-O` option is set (we are in optimized/production mode), `__debug__` will be set to `False` and the code using it will be entirely ignored by the interpreter so that there is no performance penalty.
Problem
I have a huge python code with lots of print statements useful for debugging. I want to be able to enable or disable them in one go, without poring over the hundreds of `printf`'s and commenting them each time. In C, a `#define` can be used to comment out unneeded parts of the code using `#ifdef` like this- ``` #define debug #ifdef debug printf("Debug on") #endif ``` If I don't want to be in debug mode, I can simply comment #define debug and none of my `print` statements will compile. How can this functionality be done in Python?