在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