如果阻塞,有没有更类似于Python的方法
def is_notification_needed(request: RiverPreference, gauge: Gauge) -> bool:
"""
Decides whether an email should be sent to the user or not based on their provided preferences.
:param request: RiverPreference dataclass
:param gauge: Gauge dataclass
:returns: boolean
"""
for preference in request:
if preference.level and preference.trend and preference.level >= gauge.level and preference.trend == gauge.trend:
return True
elif preference.level and not preference.trend and preference.level >= gauge.level:
return True
elif preference.trend and not preference.level and preference.trend == gauge.level:
return True
return False
preference.trend
和preference.level
默认为None
,当用户不想设置它时。我想能够检查这些值与仪表值,只有当它们被设置时
首先,pythonic的比较方法是
is not None
,如果您的值可能是falsy(0
),这一点很重要第二,你的缩进看起来不对劲,逻辑上有一个输入错误,但我认为你的目标是,如果满足任何偏好的所有条件,就返回True,否则返回False,通过检查否定,这会更简单
首先,最好显式地与
None
进行比较,而不是“滥用”布尔值None
。请记住Python的Zen(PEP-20)中的“显式优于隐式”。就是总比
另一方面,通过执行以下操作,可以利用
None
具有布尔False
值的事实:而不是:
当然,您应该指定适当的值,而不是
0
(取决于gauge.level
可以有哪些值);这只是一个例子使用
or
运算符为变量提供默认值,该变量可以是None
(或False
,或任何其他布尔值的伪等价物),实际上在Python程序中非常常用,我将其称为“Pythonic”方式来表示顺便说一下,你的
for
循环是没有意义的,因为你的循环体总是在第一次通过循环时返回我不知道这是否更像Python,但我确实发现它更容易一眼就能理解
这里的主要原则是尽早消除
None
情况,然后依赖于我们知道这些值已定义的事实,在后续代码中使用如果由于其他原因,值也可能是假,则可能将
is None
更改为不太具体的值相关问题 更多 >
编程相关推荐