[英]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.