当前位置:  开发笔记 > 编程语言 > 正文

Python中的条件编译

如何解决《Python中的条件编译》经验,为你挑选了3个好方法。

如何在Python中进行条件编译?

它使用DEF吗?



1> Ryan..:

Python的编译方式与C或C++甚至Java不同,python文件是"动态"编译的,您可以将其视为类似于Basic或Perl等解释语言.1

只需使用if语句,就可以完成与条件编译等效的操作.例如:

if FLAG:
    def f():
        print "Flag is set"
else:
    def f():
        print "Flag is not set"

您可以对创建类,变量设置和几乎所有内容执行相同的操作.

模仿IFDEF的最接近的方法是使用hasattr函数.例如:

if hasattr(aModule, 'FLAG'):
    # do stuff if FLAG is defined in the current module.

您还可以使用try/except子句来捕获名称错误,但惯用的方法是在脚本顶部将变量设置为None.

    Python代码被字节编译成像Java这样的中间形式,但通常没有单独的编译步骤.以.py结尾的"原始"源文件是可执行的.


这根本不一样.编译出条件时,绝对没有办法在释放时执行条件代码.你在这里有一些休眠代码,它基于一些可以通过修改环境激活的条件存在.对于任何形式的生产代码,这可能都不合适.也就是说,c预处理器实际上只是一个文本处理器,可以使用多种语言.你可以尝试使用python.它适用于CSS和JavaScript.

2> DNS..:

实际上有一种获得条件编译的方法,但它非常有限.

if __debug__:
    doSomething()

__debug__标志是一个特例.使用-O-OO选项调用python时,__debug__将为false,编译器将忽略该语句.这主要用于断言,这就是为什么如果你真的用优化编译你的脚本,断言就会消失.

因此,如果您的目标是添加调试代码,但防止它减慢速度或以其他方式影响"发布"版本,这可以满足您的需求.但是你不能分配一个值__debug__,所以你可以使用它.



3> Evan Plaice..:

使用pypreprocessor

也可以在PYPI(Python包索引)上找到它,并且可以使用pip获取.

使用的基本示例是:

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
print('The source is in debug mode')
#else
print('The source is not in debug mode')
#endif

您还可以通过指定...将后处理代码输出到文件中

pypreprocessor.output = 'output_file_name.py'

pypreprocessor导入和对parse()的调用之间的任何地方.

该模块本质上是C预处理器条件编译的python实现.

SideNote:这与python2x和python 3k兼容

免责声明:我是pypreprocessor的作者

更新:

我以前忘了提.与其他答案中描述的if/ elseif _debug:方法不同,这是一个真正的预处理器.生成的字节码不包含有条件排除的代码.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有