当一个函数包含多个if语句时,最好只保留一个exit。在类似php的语言中,我可以使用do-while(false),如下所示:
function a() {
do {
if (...) break;
...
if (...) break;
...
} while (FALSE);
...
return;
}如何在python中做到这一点?虽然我可以使用while(true),但如果遗漏了结尾的break,它将是一个死循环。
while True:
if ...: break
...
if ...: break
...
# oops, miss the 'break', you're dead有没有更好的方法来做到这一点呢?
PS:为了进一步说明one-exit:
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;
}希望你能看到不同之处。
发布于 2012-01-13 18:32:11
要在Python中做到这一点,我会这样写(请参阅Defining cleanup actions):
try:
if ...: return
...
if ...: return
...
finally:
#Code to be executed on every return path (including exceptions) here发布于 2012-01-13 18:28:56
我认为while循环是一种实现你想要的东西的笨拙方式。为什么不直接使用局部变量呢?
def f(x):
result = None
if (...): result = 1
elif (...): result = 2
elif (...): result = 3
else: result = 4
log(result)
return result发布于 2012-01-13 18:15:56
一种更具Pythonic风格的方法来实现您提到的目标--记录返回值- is,以将整个函数包装在装饰器中。例如:
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 + bhttps://stackoverflow.com/questions/8848646
复制相似问题