在Python语言中,有没有goto
或任何等价物能够跳转到特定的代码行?
发布于 2009-01-13 12:55:58
不,Python不支持labels和goto。它是一种(高度)结构化的编程语言。
发布于 2009-01-13 13:04:57
Python为您提供了使用一流函数执行goto所能做的一些事情的能力。例如:
void somefunc(int a)
{
if (a == 1)
goto label1;
if (a == 2)
goto label2;
label1:
...
label2:
...
}
可以像这样在python中完成:
def func1():
...
def func2():
...
funcmap = {1 : func1, 2 : func2}
def somefunc(a):
funcmap[a]() #Ugly! But it works.
诚然,这不是替代goto的最佳方式。但是,如果不知道你到底想用goto做什么,就很难给出具体的建议。
最好的办法是将其封装在一个函数中,或者使用异常。对于函数:
def loopfunc():
while 1:
while 1:
if condition:
return
对于例外情况:
try:
while 1:
while 1:
raise BreakoutException #Not a real exception, invent your own
except BreakoutException:
pass
如果你来自另一种编程语言,使用异常来做这样的事情可能会感觉有点笨拙。但我认为,如果你不喜欢使用异常,Python不适合你。:-)
发布于 2015-09-21 04:15:05
我最近在Python中启用了goto
的wrote a function decorator,就像这样:
from goto import with_goto
@with_goto
def range(start, stop):
i = start
result = []
label .begin
if i == stop:
goto .end
result.append(i)
i += 1
goto .begin
label .end
return result
我不知道为什么会有人想要做这样的事情。也就是说,我对此并不是很认真。但我想指出的是,这种元编程在Python语言中实际上是可能的,至少在CPython和PyPy中是可能的,而不仅仅是像other guy那样滥用调试器API。不过,您必须弄乱字节码。
https://stackoverflow.com/questions/438844
复制相似问题