首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中有标签/goto吗?

在Python中有标签/goto吗?
EN

Stack Overflow用户
提问于 2009-01-13 12:53:23
回答 17查看 591.1K关注 0票数 240

在Python语言中,有没有goto或任何等价物能够跳转到特定的代码行?

EN

回答 17

Stack Overflow用户

发布于 2009-01-13 12:55:58

不,Python不支持labels和goto。它是一种(高度)结构化的编程语言。

票数 157
EN

Stack Overflow用户

发布于 2009-01-13 13:04:57

Python为您提供了使用一流函数执行goto所能做的一些事情的能力。例如:

代码语言:javascript
复制
void somefunc(int a)
{
    if (a == 1)
        goto label1;
    if (a == 2)
        goto label2;

    label1:
        ...
    label2:
        ...
}

可以像这样在python中完成:

代码语言:javascript
复制
def func1():
    ...

def func2():
    ...

funcmap = {1 : func1, 2 : func2}

def somefunc(a):
    funcmap[a]()  #Ugly!  But it works.

诚然,这不是替代goto的最佳方式。但是,如果不知道你到底想用goto做什么,就很难给出具体的建议。

@ascobol

最好的办法是将其封装在一个函数中,或者使用异常。对于函数:

代码语言:javascript
复制
def loopfunc():
    while 1:
        while 1:
            if condition:
                return

对于例外情况:

代码语言:javascript
复制
try:
    while 1:
        while 1:
            raise BreakoutException #Not a real exception, invent your own
except BreakoutException:
    pass

如果你来自另一种编程语言,使用异常来做这样的事情可能会感觉有点笨拙。但我认为,如果你不喜欢使用异常,Python不适合你。:-)

票数 100
EN

Stack Overflow用户

发布于 2015-09-21 04:15:05

我最近在Python中启用了gotowrote a function decorator,就像这样:

代码语言:javascript
复制
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。不过,您必须弄乱字节码。

票数 84
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/438844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档