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

Python中的条件编译

柯振濂
2023-03-14
问题内容

如何在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。

  1. Python代码按字节编译为Java之类的中间形式,但是通常没有单独的编译步骤。以.py结尾的“原始”源文件是可执行的。


 类似资料:
  • 问题内容: 我试图写一个围棋包装用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版本,则可以执行以下操作: 要么: 然后将其用作: 您也可以根据返回不同的值。 (