我有一个函数,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