如何在python中实现“ #ifdef”?
C
我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用#ifdef
预处理程序指令,可以完全禁用这些语句以进行生产,如下所示:
#ifdef MACRO controlled text
#endif /* MACRO */
做类似的事情的最好方法是什么python
?
回答:
如果只想禁用日志记录方法,请使用该logging
模块。如果日志级别设置为排除调试语句,那么logging.debug
它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。
如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的__debug__
全局变量。True
除非将-O
标志传递给Python(或PYTHONOPTIMIZE
在环境中设置为非空值),否则将将此变量设置为。
如果__debug__
在if
语句中使用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
“优化”。
以上是 如何在python中实现“ #ifdef”? 的全部内容, 来源链接: utcz.com/qa/420777.html