我有一个函数,False
如果找不到东西,则返回,否则返回我正在寻找的数据结构。当我将从此函数返回的值分配给循环中的变量my_var
时for
,我会if my_var == False: continue
继续执行。
pychecker
不喜欢这个并报告Comparisons with False are not necessary and may not work as expected
。
这样做的python方式是什么?
作为表示没有结果的返回值,None
几乎总是更好。
如果必须使用False
,请使用not my_var
. 这假定非False
返回值永远不会“虚假”(bool()
将其转换False
为空字符串、空集合和其他一些东西的情况)。
如果对象可能是虚假的,但必须与 区分False
,那么比较是必要的,您将不得不忽略错误(一个小的变化,my_var is False
会稍微更惯用,但实际上是相同的)。但这不是一个很好的情况,你应该避免它,因为它是假的。
重复我自己:如果可能的话,使用None
并测试my_var is None
.
通常,如果对象不匹配,您将返回None
而不是ie。False
然后if my_var == None:
全部检查not 0
,not False
然后not None
返回True
。
如果您只想检查虚假值:
myval = findit('something')
if not myval:
"not found"
如果您实际上可以为具有虚假值的“is-found”案例返回一个值,则您不想这样做。例如,如果[]
找到(空列表),这仍然会报告“未找到”。
如果您关心它实际上是False
,请使用is
. True
, False
, 和None
是单例,所以使用了恒等比较运算符。
if myval is False:
"not found"
在这种情况下,您使用False
作为哨兵值来指示没有结果。
但是,通常None
用作标记“无值”,因此我建议您更改函数的签名以None
在未找到值时返回。这更符合 Python 习惯用法和方法的行为,例如{}.get('missing-key')
.
myval = findit('something')
if myval is None:
"not found"
如果因为可以返回任何值(偶数None
或False
)而没有标记值是可能的,Python 使用异常来表示没有找到值。例如{}['missing-key']
会加注KeyError
。
通常你只会使用not
:
if not my_var: continue
在这方面,Python 实际上比 C++ 的类型更强大。只有真正的布尔值可以是 True 或 False。
所以my_var
必须是一个布尔值。因此,您只需将其作为一个来检查。
if not my_var:
continue