什么应该替换python中与False的比较?

时间:2013-03-05 16:35:21

标签: python boolean pychecker

如果找不到某些内容,我有一个返回False的函数,并返回一个数据结构,其中包含我正在查找的内容。当我将此函数返回的值分配给my_var循环中的变量for时,我会if my_var == False: continue继续进行。

pychecker不喜欢这样,并报告Comparisons with False are not necessary and may not work as expected

这样做的python方式是什么?

5 个答案:

答案 0 :(得分:3)

作为表示没有结果的返回值,None几乎总是更好。

  • 如果您必须使用False,请使用not my_var。这假设非False返回值永远不会“假”(bool()将其转换为False - 这就是空字符串,空集合和其他一些事情的情况。

  • 如果对象可能是假的,但必须与False区分开来,那么比较是必要的,你必须忽略错误(一个小的变化,my_var is False会稍微多一点惯用的,但实际上是一样的)。但这不是一个好的情况,你应该避免它为了清晰。

重复一遍:如果可能,请使用None并测试my_var is None

答案 1 :(得分:3)

通常您会返回None而不是False,即如果对象不匹配。然后选中if my_var == None:not 0not Falsenot None返回True

答案 2 :(得分:2)

如果您只是想检查一个假值:

myval = findit('something')
if not myval:
   "not found"

如果您实际上可以为具有假值的“is-found”案例返回值,则不希望这样做。例如,如果找到[](空列表),则仍会报告“未找到”。

如果您关心它实际上是False,请使用isTrueFalseNone是单例,因此使用了身份比较运算符。

if myval is False:
   "not found"

在这种情况下,您使用False作为标记值来表示没有结果。

通常None用作哨兵“无价值”,但是,如果没有找到值,我建议您更改函数的签名以返回None。这与Python习惯用法和{}.get('missing-key')等方法的行为更符合。

myval = findit('something')
if myval is None:
    "not found"

如果因为可以返回任何值(甚至NoneFalse)而没有可能的标记值,Python会使用异常来表示没有找到任何值。例如。 {}['missing-key']会提出KeyError

答案 3 :(得分:1)

通常您只需使用not

if not my_var: continue

答案 4 :(得分:1)

在这方面,Python实际上比C ++更强类型化。只有真正的布尔可以是对错的。

所以my_var必须是布尔值。因此,您只需将其检查为一个。

if not my_var:
     continue