擅长:python、mysql、java
<p>重要的是要理解在Python中<code>def</code>和<code>class</code>是两个常规的可执行语句。。。</p>
<pre><code>import os
if os.name == "posix":
def foo(x):
return x * x
else:
def foo(x):
return x + 42
...
</code></pre>
<>所以,在C和C++中,使用预处理器做什么,你可以使用常规的Python语言。</p>
<P> Python语言在这点上与C和C++有本质的区别,因为没有“编译时”的概念,只有两个阶段是“解析时间”(当源代码被读取)和“运行时”,当解析代码(通常主要由定义语句,但实际上是任意Python代码组成)执行时。</p>
<P>我使用术语“解析时间”,即使在技术上,当转换中读取的源代码是一个完全编译到字节码时,因为C和C++编译的语义不同,例如函数的定义发生在那个阶段(而不是在Python中运行时发生)。</p>
<P>甚至C和C++的等价的^ {CD3>}(Python是^ {CD4>})是在运行时执行而不是在编译(解析)时间内执行的正则语句,因此它可以放置在常规的Python ^ {CD5>}内。很常见的情况是,例如在<code>try</code>块中有一个<code>import</code>,如果系统上不存在特定的可选Python库,该块将为某些函数提供替代定义。</p>
<p>最后请注意,在Python中,您甚至可以在运行时使用<code>exec</code>从头开始创建新的函数和类,而不一定在源代码中包含它们。您还可以使用代码直接组装这些对象,因为类和函数实际上只是常规对象(但是,这通常只针对类)。</p>
<p>有些工具试图将<code>def</code>和<code>class</code>定义和<code>import</code>语句视为“静态”,例如,对Python代码进行静态分析,以在可疑片段上生成警告,或者创建一个独立的可部署包,该包不依赖于在系统上安装特定的Python来运行程序。然而,所有这些人都需要考虑Python在这个领域比C或C++更具活力,并且它们也允许在自动分析失败的地方添加异常。</p>