2

我有一个函数,False如果找不到东西,则返回,否则返回我正在寻找的数据结构。当我将从此函数返回的值分配给循环中的变量my_varfor,我会if my_var == False: continue继续执行。

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

这样做的python方式是什么?

4

5 回答 5

3

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

  • 如果必须使用False,请使用not my_var. 这假定非False返回值永远不会“虚假”(bool()将其转换False为空字符串、空集合和其他一些东西的情况)。

  • 如果对象可能是虚假的,但必须与 区分False,那么比较是必要的,您将不得不忽略错误(一个小的变化,my_var is False会稍微更惯用,但实际上是相同的)。但这不是一个很好的情况,你应该避免它,因为它是假的。

重复我自己:如果可能的话,使用None并测试my_var is None.

于 2013-03-05T16:41:19.603 回答
3

通常,如果对象不匹配,您将返回None而不是ie。False然后if my_var == None:全部检查not 0not False然后not None返回True

于 2013-03-05T16:44:16.507 回答
2

如果您只想检查虚假值:

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"

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

于 2013-03-05T16:46:36.927 回答
1

通常你只会使用not

if not my_var: continue
于 2013-03-05T16:36:41.030 回答
1

在这方面,Python 实际上比 C++ 的类型更强大。只有真正的布尔值可以是 True 或 False。

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

if not my_var:
     continue
于 2013-03-05T16:39:41.193 回答