Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,应该使用if for None检查,还是使用`or`?_Python_Python 2.7_Python 3.x_Styles - Fatal编程技术网

在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
use
is 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()。