当存在多个if语句时,只保留一个函数出口

2024-03-29 00:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

function a() {
    do {
        if (...) break;
        ...
        if (...) break;
        ...
    } while (FALSE);
    ...
    return;
}

如何在python中实现这一点?虽然我可以使用while(true),但是如果缺少尾部的中断,它将是一个死循环。在

^{pr2}$

有没有一种更像Python的方法?在

注:为了进一步说明一个出口:

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;
}

希望你能看到区别。。。在


Tags: 函数log语言falsetruereturniffunction
3条回答

为了在Python中实现这一点,我可以这样写(参见Defining cleanup actions):

try:
    if ...: return
    ...
    if ...: return
    ...
finally:
    #Code to be executed on every return path (including exceptions) here

我认为while循环是一种很尴尬的方式来实现你所要的。为什么不直接使用局部变量呢?在

def f(x):
  result = None

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

  log(result)
  return result

实现您提到的目标(记录返回值)的一种更python方法是将整个函数包装在decorator中。例如:

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

相关问题 更多 >