当一个函数包含多个if语句时,保持一个退出似乎是一个好习惯。在类似php的语言中,我可以使用do-while(false),如下所示:
function a() {
do {
if (...) break;
...
if (...) break;
...
} while (FALSE);
...
return;
}
如何在python中执行此操作?虽然我可以使用while(true),但如果错过了尾随中断,它将是一个死循环。
while True:
if ...: break
...
if ...: break
...
# oops, miss the 'break', you're dead
有更多的pythonic方法吗?
PS:进一步说明一出口:
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;
}
希望你看到差异......
答案 0 :(得分:3)
我认为while循环是一种尴尬的方式来实现您正在寻找的东西。为什么不使用局部变量?
def f(x):
result = None
if (...): result = 1
elif (...): result = 2
elif (...): result = 3
else: result = 4
log(result)
return result
答案 1 :(得分:3)
要在Python中执行此操作,我会这样写(请参阅Defining cleanup actions):
try:
if ...: return
...
if ...: return
...
finally:
#Code to be executed on every return path (including exceptions) here
答案 2 :(得分:1)
实现你提到的目标的更多Pythonic方法 - 记录返回值 - 是将整个函数包装在装饰器中。例如:
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
答案 3 :(得分:-1)