如果只想禁用日志记录方法,请使用该
logging模块。如果日志级别设置为排除调试语句,那么
logging.debug它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。
如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的
__debug__全局变量。
True除非将
-O标志传递给Python(或
PYTHONOPTIMIZE在环境中设置为非空值),否则将将此变量设置为。
如果
__debug__在
if语句中使用if ,则该
if语句实际上仅编译到
True分支中。这种特殊的优化与Python一样接近预处理器宏。
请注意,与宏不同,您的代码在的两个分支上仍必须在语法上正确
if。
为了展示其
__debug__工作原理,请考虑以下两个功能:
def f(): if __debug__: return 3 else: return 4def g(): if True: return 3 else: return 4
现在使用以下命令检查它们
dis:
>>> dis.dis(f) 20 LOAD_ConST 1 (3) 3 RETURN_VALUE >>> dis.dis(g) 20 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“优化”。



