首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有多个if语句时,只保留函数的一个出口

问当有多个if语句时,只保留函数的一个出口
EN

Stack Overflow用户
提问于 2012-01-13 17:51:34
回答 4查看 596关注 0票数 2

当一个函数包含多个if语句时,最好只保留一个exit。在类似php的语言中,我可以使用do-while(false),如下所示:

代码语言:javascript
复制
function a() {
    do {
        if (...) break;
        ...
        if (...) break;
        ...
    } while (FALSE);
    ...
    return;
}

如何在python中做到这一点?虽然我可以使用while(true),但如果遗漏了结尾的break,它将是一个死循环。

代码语言:javascript
复制
while True:
    if ...: break
    ...
    if ...: break
    ...
    # oops, miss the 'break', you're dead

有没有更好的方法来做到这一点呢?

PS:为了进一步说明one-exit:

代码语言:javascript
复制
function a() {
    if (...) { $a = 1; log($a); return $a; }
    if (...) { $a = 2; log($a); return $a; }
    if (...) { $a = 3; log($a); return $a; }
}

function a() {
    do {
        if (...) { $a = 1; break; }
        if (...) { $a = 2; break; }
        if (...) { $a = 3; break; }
    } while (FALSE);
    log($a);
    return $a;
}

希望你能看到不同之处。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-13 18:32:11

要在Python中做到这一点,我会这样写(请参阅Defining cleanup actions):

代码语言:javascript
复制
try:
    if ...: return
    ...
    if ...: return
    ...
finally:
    #Code to be executed on every return path (including exceptions) here
票数 3
EN

Stack Overflow用户

发布于 2012-01-13 18:28:56

我认为while循环是一种实现你想要的东西的笨拙方式。为什么不直接使用局部变量呢?

代码语言:javascript
复制
def f(x):
  result = None

  if (...): result = 1
  elif (...): result = 2
  elif (...): result = 3
  else: result = 4

  log(result)
  return result
票数 3
EN

Stack Overflow用户

发布于 2012-01-13 18:15:56

一种更具Pythonic风格的方法来实现您提到的目标--记录返回值- is,以将整个函数包装在装饰器中。例如:

代码语言:javascript
复制
from functools import wraps

def print_return(fn):
    @wraps(fn)
    def wrapped(*args, **kwargs):
        return_value = fn(*args, **kwargs)
        print return_value
        return return_value
    return wrapped


@print_return
def foo(a, b):
    return a + b
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8848646

复制
相关文章

相似问题

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