在python中,应该使用if for None检查,还是使用`or`?
从风格上看,使用在python中,应该使用if for None检查,还是使用`or`?,python,python-2.7,python-3.x,styles,Python,Python 2.7,Python 3.x,Styles,从风格上看,使用if进行None检查是否更好: if date is None: date = datetime.now() 或者使用或 date = date or datetime.now() 第一个看起来更具描述性,但第二个看起来更优雅。我知道这个问题的答案可能是自以为是的,但我想问的是,是否有官方风格的建议?在第二种情况下,你没有真正明确地回答。如果date是任何非真实值,则将使用datetime.now() 你的比较实际上是: 如果针对真实值进行常规测试: if not d
if
进行None
检查是否更好:
if date is None:
date = datetime.now()
或者使用或
date = date or datetime.now()
第一个看起来更具描述性,但第二个看起来更优雅。我知道这个问题的答案可能是自以为是的,但我想问的是,是否有官方风格的建议?在第二种情况下,你没有真正明确地回答。如果date
是任何非真实值,则将使用datetime.now()
你的比较实际上是:
如果针对真实值进行常规测试:
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
useis None
进行显式检查,最好是显式的(这是禅宗中的规则之一)
如果您正在检查非真实值,我喜欢将或作为一种技巧。不过,这可能会让一些不熟悉Python在这里的行为方式的人感到困惑 考虑你的情况:
if date is None:
仅当date
的值为None时,才会为True
。如果日期值为空字符串、0、空列表等,则不会将日期设置为当前日期
但是,date或datetime.now()
将设置当前日期,即使只有None
之外的值为空。逻辑上存在差异:)
检查完整的列表。你看了吗?是的,我浏览了一下,并用Cmd+F'ed搜索了“or”,没有看到任何相关的date=datetime。现在()如果date不是其他日期,谢谢你的回复。如果这是一个定义为def foo(date=None)
的函数,主要是检查是否传入了日期,你会怎么看?@ChristopherShroba我个人喜欢或,我在标准库中看到过它的例子(现在不记得在哪里了)。问题是如果有人通过'
或0
会发生什么?那有效吗?如果,就像我猜的那样,答案是否定的,那么使用或
,如果您只想检查None
s,那么使用是None
。最后是个人品味,pep8
没有强制执行这些东西。这是一个很好的观点,我应该在我的问题上更具体一些。如果这是在定义为def foo(date=None)
的函数中,您的观点是什么?您主要检查是否传入了日期?最好使用返回日期if date else date.now()
根据我的说法,与日期或日期。now
相比,显示逻辑赋值更清晰。但它是基于意见的,不包括date=date或datetime。如果date为none,则now()始终将其设置为布尔值True?如果date为None,则date=None或“x”,=>date=True。@fuzzyhedge:Python不是这样工作的。尝试“你好”或“世界”
,您将获得answer@MoinuddinQuadri,如果当前日期为0(可能是开始日期),则返回date.now()。