在浏览某些代码时,我遇到了这一行:
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))
答案 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或多处理组合。