在python中,你应该使用if for None检查,还是使用`或'?

时间:2016-11-20 23:03:01

标签: python python-2.7 python-3.x styles

从风格上讲,使用None进行if检查会更好:

if date is None:
    date = datetime.now()

或使用or

date = date or datetime.now()

第一个似乎更具描述性,但第二个似乎更优雅。我理解这个问题的答案可能是固执己见的,但我要问的是是否有正式的风格建议?

2 个答案:

答案 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以获取完整列表。