作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有更 pythonic 的方法来执行此 if block ?
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
,如果您的值可能是假的 (0
),这一点很重要。
其次,你的缩进看起来不对,逻辑上有错别字,但我认为你的目标是在满足任何偏好的所有条件时返回 True,否则返回 False,通过检查否定会更简单。
for preference in request:
if preference.level is not None and preference.level < gauge.level:
continue
if preference.trend is not None and preference.trend != gauge.trend:
continue
return True # NB: treats all-None as a match
return False
关于仅当变量不是 None 时才进行 if 语句比较的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67358164/
我是一名优秀的程序员,十分优秀!