编程于C
我曾经有代码部分仅用于调试目的(记录命令等)。通过使用这些语句可以完全禁用生产#ifdef
预处理器指令,如下所示:
#ifdef MACRO
controlled text
#endif /* MACRO */
做类似事情的最好方法是什么python
?
如果您只想禁用日志记录方法,请使用logging
模块。如果日志级别设置为排除调试语句,那么logging.debug
将非常接近无操作(它只检查日志级别并返回而不插入日志字符串)。
如果您想在字节码编译时以特定变量为条件实际删除代码块,那么您唯一的选择是相当神秘的__debug__
全局变量。该变量设置为True
除非-O
标志被传递给Python(或PYTHONOPTIMIZE
被设置为环境中非空的东西)。
If __debug__
用于if
声明,if
语句实际上只编译成True
分支。这种特殊的优化非常接近 Python 中的预处理器宏。
请注意,与宏不同,您的代码在两个分支中都必须在语法上正确。if
.
展示如何__debug__
有效,考虑这两个函数:
def f():
if __debug__: return 3
else: return 4
def g():
if True: return 3
else: return 4
现在检查它们dis
:
>>> dis.dis(f)
2 0 LOAD_CONST 1 (3)
3 RETURN_VALUE
>>> dis.dis(g)
2 0 LOAD_GLOBAL 0 (True)
3 JUMP_IF_FALSE 5 (to 11)
6 POP_TOP
7 LOAD_CONST 1 (3)
10 RETURN_VALUE
>> 11 POP_TOP
3 12 LOAD_CONST 2 (4)
15 RETURN_VALUE
16 LOAD_CONST 0 (None)
19 RETURN_VALUE
正如你所看到的,只有f
是“优化”的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)