从风格上讲,使用None
进行if
检查会更好:
if date is None:
date = datetime.now()
或使用or
?
date = date or datetime.now()
第一个似乎更具描述性,但第二个似乎更优雅。我理解这个问题的答案可能是固执己见的,但我要问的是是否有正式的风格建议?
答案 0 :(得分:3)
在第二种情况下,你并没有真正明确。如果date
任何非Truthy值,则会使用datetime.now()
。
您的比较实际上是:
如果通常对truthy值进行测试:
if not date:
date = datetime.now()
# versus
date = date or datetime.now()
# or
date = datetime.now() if date else date
或者,只检查None
s:
if date is None:
date = datetime.now()
# versus (as Peter states in a comment)
date = datetime.now() if date is None else date
PEP 8对此没有任何评论,如果你只是明确地对None
使用is None
进行检查,那么明确是好的(这是Zen中的规则之一) 。
如果您正在检查非真实值,我喜欢or
作为技巧。不过,它可能会让一些不熟悉Python行为的人感到难过。
答案 1 :(得分:0)
考虑你的情况:
if date is None:
仅当True
的值为None时,才为date
。如果date的值为空字符串,0,空列表等,则不会将日期设置为当前日期
但是,date or datetime.now()
即使在空值除了None
之外的情况下也会设置当前日期。逻辑上存在差异:)
检查Truth Value Testing以获取完整列表。