当前位置: 首页 > 面试题库 >

如何在python中实现“ #ifdef”?

颛孙智勇
2023-03-14
问题内容

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“优化”。



 类似资料:
  • 问题内容: 如何实现与C#代码等效的Python? 这是一个好主意吗??请在您的答案中举例说明。 问题答案: 正如其他人在这里提到的: 在Python中不需要接口。这是因为Python具有适当的多重继承,还具有鸭式输入法,这意味着 必须 在Java中具有接口的地方,而不必在Python中具有接口。 也就是说,接口还有多种用途。其中一些被Python 2.6中引入的Pythons抽象基类覆盖。如果您

  • 问题内容: 我想知道Python 3中的新super是如何实现的。 我做了一个小例子之后,这个问题就浮现在脑海中,我得到了一个奇怪的错误。我正在使用Pyutilib组件体系结构(PCA),并且已经制作了自定义元类来驱动另一个类的创建: 我收到以下错误: 我wonderign究竟超(一样),它引发的错误,而所有的,并存在。另外的“老方法”-正在工作。 问题答案: 如何执行?这是python3.3的代

  • 问题内容: 我已经实现了 算法 对于GMM使用这个 后[GMMs]与最大似然优化 努比](https://towardsdatascience.com/how-to-code-gaussian-mixture-models- from-scratch-in-python-9e7975df5252)未成功,如下所示: when I run the algorithm on a 1-D time-se

  • 从Udacity的深度学习类来看,y_i的软最大值只是指数除以整个Y向量的指数之和: 其中< code>S(y_i)是< code>y_i的softmax函数,而< code>e是指数,而< code>j是输入向量y中的列数 我尝试了以下方法: 返回: 但建议的解决方案是: 它产生与第一个实现相同的输出,即使第一个实现显式地取每列和max的差值,然后除以总和。 有人能用数学说明为什么吗?一个正确,

  • 问题内容: …可以用于字符串相等的关键字。 我都尝试过,但是他们没有用。 问题答案: 测试字符串仅在插入字符串时有效。除非你真的知道自己在做什么,并明确实习的字符串,你应该 永远不会 使用的字符串。 测试 身份 ,而非 平等 。这意味着Python会简单地比较一个对象所在的内存地址。基本上回答了以下问题:“同一对象有两个名称吗?” -超载毫无意义。 例如,为 False 。通常,Python将每个

  • 问题内容: 我知道PHP或Java的虚拟方法。 如何在Python中实现它们? 还是我要在抽象类中定义一个空方法并覆盖它? 问题答案: 当然,您甚至不必在基类中定义方法。在Python中,方法要比虚拟方法更好-它们是完全动态的,因为Python中的输入是 鸭子输入 。 而且在Python中,甚至不必从通用基类派生该行为即可- 您可以免费获得它。就是说,一些程序员更喜欢以更严格的方式定义他们的类层次