如何在Python中进行条件编译?
使用DEF吗?
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。
问题内容: 我试图写一个围棋包装用CGO的ENET。 当我尝试在Mac上编译包装程序时,该库较旧,并且界面略有不同。99%的代码是相同的,只需要更改几个C调用即可。 在Go中处理此类问题的最佳实践是什么? 有什么方法可以进行条件编译或条件导入吗? 问题答案: Go没有条件编译或条件导入。处理C代码中的类型差异。 [Go]作者是否反对预处理?
问题内容: 我在Go 1中使用条件编译遇到了麻烦。 这是我的测试代码。关于“ // + build”约束和“ -tags”标志,我有什么误解吗? main1.go main2.go 运行“执行构建”时,我仍然出现编译错误 问题答案: 您必须跟随一个空白行。 在我的简短搜索中,找不到该文件的记录位置/位置。但消息人士明确指出
Rust 有一个特殊的属性,#[cfg],它允许你基于一个传递给编译器的标记编译代码。它有两种形式: #[cfg(foo)] # fn foo() {} #[cfg(bar = "baz")] # fn bar() {} 它还有一些帮助选项: #[cfg(any(unix, windows))] # fn foo() {} #[cfg(all(unix, target_pointer_wid
编译器有一个定义符号列表,定义符号可以通过 !define 定义或使用 /D 命令行开关。这些定义符号可以用于条件编译 (通过 !ifdef 定义) 或用于符号替换 (一种格式简单的宏)。若要用它的值替换一个符号,请使用 ${符号} (如果没有定义符号,那么不会产生转换)。这个转换为“先到先得”,这意味着如果你做了: !define 符号1 ${符号2} 当出现该行时,如果定义了“符号2”它将
条件编译在处理机器依赖、调试以及编译阶段设定特定选项时十分有用。不过要小心条件编译。各种控制很容易以一种无法预料的方式结合在一起。如果使用#ifdef判断机器依赖,请确保当没有机器类型适配时,返回一个错误,而不是使用默认机器类型(使用#error并缩进一级,这样它可以一些老旧的编译器下工作)。如果你#ifdef优化选项,默认情况下应该是一个未经优化的代码,而不是一个不兼容的程序。确保测试的是未经优
问题内容: 有没有一种方法可以用with语句开始代码块,但是有条件地? 就像是: 为了明确起见,一种情况将在with语句中包含一个块,而另一种可能性将是相同的块,但未包含(即,好像没有缩进) 当然,最初的实验会产生压痕错误。 问题答案: 如果要避免重复代码,并使用3.7(引入时)甚至3.3(引入时)之前的Python版本,则可以执行以下操作: 要么: 然后将其用作: 您也可以根据返回不同的值。 (