2014-04-23 49 views
-3

Python中的一个快速函数问题。是否有可能停止处理函数并尽早返回?即如下所示:使用Python退出函数

def _do_something(): 

    if not exists('/etc/', use_sudo=True): 
     # no files don't do any more 
     return 
    # if ok continue with stuff 
    sudo('/etc/init.d/nginx stop') 

可以吗?或者有什么像'退出'?

+2

当你尝试时发生了什么? – geoffspear

+3

是的,没关系。只需执行此操作并观察自己,就需要更少的时间,而不是发布有关此问题的问题。 – BartoszKP

回答

1

是的,这是构建程序逻辑的常用方法。

有些人会说,你写你的函数的其他方式,如:

def _do_something(): 
    if exists('/etc/', use_sudo=True): 
     sudo('/etc/init.d/nginx stop') 

,因为它是短,在某种程度上,更直接表示你写的函数是什么意思。

有一件事情需要担心在问题中存在的结构是当函数变得更复杂时会发生什么。有很多返回语句的庞大而复杂的函数可能实际上有无法到达的代码,其中函数保证提前返回,并且函数末尾会有代码不会执行。

def lol(): 
    print "first!" 
    return 
    print "unreachable" 

在这种情况下,它是微不足道的看到“无法访问”将永远不会被打印出来,但如果你有很多嵌套if/else语句,这变得很不明显。良好的IDE会警告您无法访问的代码,但如果您选择使用更简单的文本编辑器进行编程,则需要考虑这一点。注意:为防万一您不知道,以一个或两个下划线开头的Python函数通常会附加一个“特殊含义”。我会留下其余的给你去探索。

2

你的问题听起来像“有没有更好的方法来做到这一点?”。 不,这看起来很好,并会工作。

对于循环,您可以使用break-statement,但在函数中,这是“停止”它的好方法 - 隐式返回None