什么时候`if False`在Python中执行?

时间:2011-10-22 23:50:11

标签: python

在浏览某些代码时,我遇到了这一行:

if False: #shedskin

我知道Shedskin是一种Python - > C ++编译器,但我无法理解该行。

if False:不应该执行?这是怎么回事?

上下文:

这是整个街区:

if False: # shedskin
    AStar(SQ_MapHandler([1], 1, 1)).findPath(SQ_Location(1,1), SQ_Location(1,1))

More context is on Google Code(向下滚动)。

5 个答案:

答案 0 :(得分:7)

永远不会被执行。这是临时禁用部分代码的一种方法。

答案 1 :(得分:7)

它不会执行,因为它不应该执行。 if False:是故意阻止下一行执行的,因为该代码的唯一目的似乎是帮助Shed Skin推断有关AStar()函数参数的类型信息。

您可以看到此in httplib的另一个示例:

#   Useless stuff to help type info
if False :
    conn._set_tunnel("example.com")

答案 2 :(得分:3)

理论上,可以执行:

True, False = False, True
if False: print 'foo'

但通常这将用于临时禁用代码路径。

答案 3 :(得分:2)

你认为这永远不会评估为真是正确的。当程序员有很多调试代码但又不想删除发布中的调试代码时,有时会这样做,所以他们只是将if False:放在它上面。

答案 4 :(得分:2)

显然没有足够的声誉发表评论,但蒂姆斯通的回答是正确的。假设我们有这样的函数:

def blah(a,b):
    return a+b

现在为了执行类型推断,必须至少有一次调用blah,否则在编译时就不可能知道参数的类型。

对于一个独立的程序,这不是问题,因为必须为其运行的所有内容都是从某个地方间接调用的。

对于扩展模块,调用可以来自“外部”,因此有时我们必须向函数添加“假”调用以使类型推断成为可能..因此'if False'。

在shedskin示例集中,有一些程序被编译为扩展模块,以便与例如pygame或多处理组合。