【发布时间】:2016-07-07 04:01:21
【问题描述】:
我有一个方法,它依次调用其他 4 个方法来检查特定条件,并在返回真值时立即返回(不检查以下那些)。
def check_all_conditions():
x = check_size()
if x:
return x
x = check_color()
if x:
return x
x = check_tone()
if x:
return x
x = check_flavor()
if x:
return x
return None
这似乎是很多行李代码。而不是每个 2 行 if 语句,我宁愿做这样的事情:
x and return x
但那是无效的 Python。我在这里错过了一个简单、优雅的解决方案吗?顺便说一句,在这种情况下,这四种检查方法可能很昂贵,所以我不想多次调用它们。
【问题讨论】:
-
这些 x 是什么?它们只是 True/False,还是它们是包含一些信息的数据结构,而 None 或类似的被用作表示没有任何数据的特例?如果是后者,您几乎肯定应该使用异常。
-
@gerrit 上面显示的代码是假设/伪代码,与代码审查无关。如果帖子的作者希望他们的真实、实际的工作代码得到审查,那么是的,欢迎他们在 Code Review 上发帖。
-
为什么你认为
x and return x比if x: return x好?后者更具可读性,因此可维护。您不必太担心字符或行数;可读性很重要。无论如何,它们是完全相同数量的非空白字符,如果你真的需要,if x: return x可以在一行上正常工作。 -
请澄清您是否关心实际值,或者您真的只需要返回一个布尔值。这会有所不同,哪些选项可用,哪些选项更清楚地传达了意图。命名表明您只需要一个布尔值。避免多次调用这些函数是否重要也很重要。函数是否采用任何或不同的参数集也可能很重要。如果没有这些澄清,我认为这个问题属于不清楚、过于宽泛或基于意见的问题之一。
-
@jpmc26 OP 明确谈到了真实的返回值,然后他的代码返回
x(而不是bool(x))所以就目前而言,我认为假设 OP 的函数可以返回是安全的任何东西,他想要第一个真实的东西。
标签: python if-statement