python中的条件编译

python中的条件编译,python,Python,您好,我正在尝试用python实现条件编译,类似于,我已经看到和 但它不起作用。我对python比较陌生,如何解决这个问题?您需要定义ONLINE_JUDGE变量-这是一个“if”,而不是真正的“ifdef” 您需要定义ONLINE_JUDGE变量-这是一个“if”,而不是真正的“ifdef” 看起来您正试图使用此选项向在线法官提交解决方案。对于gcc,判断机器提供一个参数-D ONLINE\u judge。这与在代码中包含以下内容具有相同的效果: #define ONLINE_JUDGE P

您好,我正在尝试用python实现条件编译,类似于,我已经看到和


但它不起作用。我对python比较陌生,如何解决这个问题?

您需要定义ONLINE_JUDGE变量-这是一个“if”,而不是真正的“ifdef”


您需要定义ONLINE_JUDGE变量-这是一个“if”,而不是真正的“ifdef”


看起来您正试图使用此选项向在线法官提交解决方案。对于gcc,判断机器提供一个参数
-D ONLINE\u judge
。这与在代码中包含以下内容具有相同的效果:

#define ONLINE_JUDGE

Python没有预处理器。因此,在调用解释器时,无论是在代码中还是在命令行中,都无法定义宏(与C中的定义相同)。因此,我认为在线法官不太可能为Python提供类似的选项。但它可能会提供一些作为命令行参数的内容,您可以通过
sys.argv[1://code>使用这些参数。在在线法官处检查用于调用Python的命令(必须在其网站的某个地方提及)。

看起来您正试图使用此命令向在线法官提交解决方案。对于gcc,判断机器提供一个参数
-D ONLINE\u judge
。这与在代码中包含以下内容具有相同的效果:

#define ONLINE_JUDGE
Python没有预处理器。因此,在调用解释器时,无论是在代码中还是在命令行中,都无法定义宏(与C中的定义相同)。因此,我认为在线法官不太可能为Python提供类似的选项。但它可能会提供一些作为命令行参数的内容,您可以通过
sys.argv[1://code>使用这些参数。在在线法官处检查用于调用Python的命令(必须在其网站的某个地方提及)。

()以
Python-O%s
的形式调用Python脚本。您可以通过
\uuuu调试\uuuu
在脚本中检测它。比较:

$ python -c 'print __debug__'
True

因此,您可以在脚本中编写:

ONLINE_JUDGE = not __debug__
# ...
if ONLINE_JUDGE:
   pass # here goes online judge specific stuff
()调用Python脚本作为
Python-O%s
。您可以通过
\uuuu调试\uuuu
在脚本中检测它。比较:

$ python -c 'print __debug__'
True

因此,您可以在脚本中编写:

ONLINE_JUDGE = not __debug__
# ...
if ONLINE_JUDGE:
   pass # here goes online judge specific stuff
使用

也可以在上找到,因此可以使用pip加载

您的具体示例如下所示:

from pypreprocessor import pypreprocessor
pypreprocessor.parse()

#define onlinejudge

#ifdef onlinejudge
import math
#endif
通过命令行添加定义也很容易完成:

import sys
from pypreprocessor import pypreprocessor

#exclude

# defined if 'mode' is found in the command line arguments
if 'mode1' in sys.argv:
    pypreprocessor.defines.append('mode1')

# defined if 'mode2' is found in the command line arguments
if 'mode2' in sys.argv:
    pypreprocessor.defines.append('mode2')

#endexclude

pypreprocessor.parse()

#ifdef mode1
print('this script is running in mode1')
#ifdef mode2
print('this script is running in mode2')
#else
print('no modes specified')
#endif
以下是输出应该产生的结果

“python prog.py mode1”:

此脚本正在模式1下运行

“python prog.py mode2”:

此脚本正在模式2下运行

“python prog.py mode1 mode2”:

此脚本正在模式1下运行 此脚本正在模式2下运行

“python prog.py”:

没有指定模式

旁注:python2x和python3k都支持python2x和python3k

免责声明:我是pypreprocessor的作者

也可以在上找到,因此可以使用pip加载

您的具体示例如下所示:

from pypreprocessor import pypreprocessor
pypreprocessor.parse()

#define onlinejudge

#ifdef onlinejudge
import math
#endif
通过命令行添加定义也很容易完成:

import sys
from pypreprocessor import pypreprocessor

#exclude

# defined if 'mode' is found in the command line arguments
if 'mode1' in sys.argv:
    pypreprocessor.defines.append('mode1')

# defined if 'mode2' is found in the command line arguments
if 'mode2' in sys.argv:
    pypreprocessor.defines.append('mode2')

#endexclude

pypreprocessor.parse()

#ifdef mode1
print('this script is running in mode1')
#ifdef mode2
print('this script is running in mode2')
#else
print('no modes specified')
#endif
以下是输出应该产生的结果

“python prog.py mode1”:

此脚本正在模式1下运行

“python prog.py mode2”:

此脚本正在模式2下运行

“python prog.py mode1 mode2”:

此脚本正在模式1下运行 此脚本正在模式2下运行

“python prog.py”:

没有指定模式

旁注:python2x和python3k都支持python2x和python3k


免责声明:我是pypreprocessor的作者,对我的口味来说有点太重了。这个怎么样:

import sys
try: fin = open('Problem.in')
except: fin = sys.stdin

通用性和真正方便本身。二合一。

对我的口味来说有点太重了。这个怎么样:

import sys
try: fin = open('Problem.in')
except: fin = sys.stdin

通用性和真正方便本身。二合一。

不,在线评委在在线评委中被定义为正确,那么我想这是行不通的。@Tretwick:那评论毫无意义。名字不只是“出现”;要么是定义的,要么是导入的。@Ignacio Vazquez Abrams:我说过名字在网上被定义为真实的,请仔细阅读我的评论。原来的网站似乎有问题,请查看这是一个C定义。Python不是C。@Tretwick Marian:从你的链接:“那么你可以试着阅读一些问题,然后用C/C++/Pascal/Java提交你的解决方案。”-我认为它不支持Python。不,在线判断在在线判断中被定义为是正确的,那么我想这是行不通的。@Tretwick:那评论毫无意义。名字不只是“出现”;要么是定义的,要么是导入的。@Ignacio Vazquez Abrams:我说过名字在网上被定义为真实的,请仔细阅读我的评论。原来的网站似乎有问题,请查看这是一个C定义。Python不是C.@Tretwick Marian:从你的链接:“那么你可以试着阅读一些问题,然后用C/C++/Pascal/Java提交你的解决方案。”-我认为它不支持Python。我检查过了,所以我想我必须自己安排。谢谢。@Tretwick Marian:啊,CodeForces:)。您可以请求他们在命令行中添加参数。他们非常乐于接受反馈。这不仅仅是代码力,我想对于所有其他法官,如spoj和sgu,标准几乎是一样的,我在spoj中更积极:-)我检查过了,所以我想我必须自己安排。谢谢。@Tretwick Marian:啊,CodeForces:)。您可以请求他们在命令行中添加参数。他们非常乐于接受反馈。这不仅仅是代码力,我想对于所有其他法官,如spoj和sgu,标准几乎是一样的,但我在spoj中更积极:-)