Gotos在计算机科学和编程中普遍受到指责,因为它们会导致非常非结构化的代码。
Python(像当今几乎所有编程语言一样)都支持结构化编程,该结构使用if
/ then / else,循环和子例程控制流。
以结构化方式进行思考的关键是理解如何以及为什么要分支代码。
例如,让我们假设Python有一个
goto和对应的
label语句 shudder 。看下面的代码。如果数字大于或等于0,则在其中打印
number = input()if number < 0: goto negativeif number % 2 == 0: print "even"else: print "odd"goto endlabel: negativeprint "negative"label: endprint "all done"
如果我们想知道何时执行一段代码,则需要仔细地在程序中进行追溯,并检查标签是如何到达的-这实际上是做不到的。
例如,我们可以将以上内容重写为:
number = input()goto checklabel: negativeprint "negative"goto endlabel: checkif number < 0: goto negativeif number % 2 == 0: print "even"else: print "odd"goto endlabel: endprint "all done"
在这里,有两种可能的方法可以到达“终点”,我们不知道选择了哪一个。随着程序变大,这种问题变得更加严重,并导致产生意粉代码
相比较而言,下面是你如何 会 在Python编写这个程序:
number = input()if number >= 0: if number % 2 == 0: print "even" else: print "odd"else: print "negative"print "all done"
我可以查看特定的代码行,并通过追溯
if/then/else其所在的块树来了解在什么条件下可以满足要求。例如,我知道
print"odd"当a时将运行该行
((number >= 0) == True) and ((number % 2 == 0) == False)。



