繁体   English   中英

如何正确压缩此 Python IF 语句?

[英]How do I properly condense this Python IF statement?

我对 Python 很陌生,并试图找到一种更好的编码方式。 必须有一种方法,但只是不知道如何去做。

这两个查询本质上是相同的,所以必须有一种方法来减少。 有没有更有效的方法来做到这一点?

        if set_date is not None:

            if is_rejected != 'true':
                query = query\
                    .filter(createddate__lte=set_date) \
                    .car_statuses(CarTow.TOWED) \
                    .order_by('-createddate')
            else:
                query = query\
                    .filter(createddate__lte=set_date) \
                    .car_statuses(CarTow.TOWED,CarTow.CONFIRMED) \
                    .order_by('-createddate')

            return query

对不起,如果这是一个简单的问题,新手在这里。

您可以通过将不同的参数拉入 if 语句并将常见的东西放在外面来简化。

if set_date is not None:
       if is_rejected != 'true':
             car_statuses = (CarTow.TOWED,)
       else:
             car_statuses = (CarTow.TOWED, CarTow.CONFIRMED)

       query = query\
           .filter(createddate__lte=set_date) \
           .car_statuses(*car_statuses) \
           .order_by('-createddate')
      return query

您可以使用三元逻辑来添加元组。

query = (
    query
    .filter(createddate__lte = set_date) 
    .car_statuses((CarTow.TOWED,) + ((CarTow.CONFIRMED,) if is_rejected == 'true' else ()) 
    .order_by('-createddate')
)

你可能想替换这个:

if set_date is not None:

有了这个:

if set_date:

看看 Python 如何评估 if 条件:真值测试 (pydocs)

以下是被认为是假的大多数内置对象: 定义为假的常量:无和假。 任何数字类型的零:0, 0.0, 0j, Decimal(0), Fraction(0, 1) 空序列和 collections: '', (), [], {}, set(), range(0)

此外,'is' 会给出一些奇怪的结果,它实际上是用于确定两个标签是否引用相同的 object。 理解 Python 的 is 运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM