Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中何时执行'if False'?_Python - Fatal编程技术网

在Python中何时执行'if False'?

在Python中何时执行'if False'?,python,Python,在浏览一些代码时,我遇到以下行: if False: #shedskin 我理解这是一种Python -C++编译器,但我不能理解这行。 不应该如果为False:永远不执行吗?这是怎么回事 上下文: 这就是整个街区: if False: # shedskin AStar(SQ_MapHandler([1], 1, 1)).findPath(SQ_Location(1,1), SQ_Location(1,1)) (一直向下滚动)。它永远不会被执行。这是暂时禁用部分代码的一种方法。您正确

在浏览一些代码时,我遇到以下行:

if False: #shedskin

我理解这是一种Python -C++编译器,但我不能理解这行。

不应该
如果为False:
永远不执行吗?这是怎么回事

上下文:

这就是整个街区:

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

(一直向下滚动)。

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

您正确地认为这永远不会计算为真。有时,当程序员有大量调试代码,但不想在发行版中删除调试代码时,就会执行此操作,因此他们只需将
if False:
置于所有代码之上。

理论上,它可以执行:

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

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

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

您可以看到这方面的另一个示例:


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

def blah(a,b):
    return a+b
现在为了执行类型推断,必须至少有一个对blah的调用,否则就不可能在编译时知道参数的类型

对于一个独立的程序,这不是问题,因为运行它所必须编译的所有东西都是从某处间接调用的

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


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

您能澄清一点吗?你是说
if False:
是开发人员为某些Shedskin解析行为提供的解决方案吗?@Inerdia我已经添加了上下文。@goldsz这是我想知道的一部分。如果行的目的只是添加上下文(例如,对于Shedskin),我建议它不会那么混乱(更像Pythonic)在代码底部的
if\uuu name\uuu==“\uuuu main\uuuu”之后添加这一行:
。值得注意的是,使用
if 0
实际上会在编译时删除代码路径,而
if False
则不能,因为
False
可以重新分配(至少在Python 2.7中).鉴于Shed Skin项目的描述,这似乎是对我最可能的解释。我相信Wing Python IDE也有类似的功能,您可以通过在代码中添加
assert-isinstance(foo,bar)
来提供代码完成引擎的线索。
def blah(a,b):
    return a+b