Returnifvalue习语(条件返回)

2024-09-21 05:38:28 发布

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

最近我发现自己在一些函数中使用了以下习惯用法:

[...]
def validate(self):
    # Possibly do something "expensive" to calculate whether data is valid or not
    if data_is_valid:
        return ObjectOfSomeSort(validated_data)
    return False

ret = self.validate()
if ret:
    return ret
[...]

但是,我觉得ret = ...; if ret: return ret语法有点笨拙和不协调,而且我并不总是能够做类似的事情

^{pr2}$

因为有时我的验证函数包含一些计算开销很大的逻辑。在

那么,StackOverflow,针对这类问题有哪些python习惯用法;具体地说,我如何“有条件地返回”?在


Tags: 函数selfdatareturnifisdefvalidate
3条回答

Python的惯用用法是使用异常。在

   class InvalidDataError(Exception):
       pass

   def get_valid_object():
       if not data_is_valid:
           raise InvalidDataError()
       return ObjectOfSomeSort(validated_data)

然后使用它:

^{pr2}$

你可以的

def ifloop(x):
    if x: yield x

for ret in ifloop(self.validate()):
     return ret

如果代码在if之后不需要继续,我会写:

return self.validate() or None

相关问题 更多 >

    热门问题