Python 如果我的函数必须返回布尔值,它是否应该返回False?

Python 如果我的函数必须返回布尔值,它是否应该返回False?,python,boolean,nonetype,Python,Boolean,Nonetype,写作的好处是什么: def contains(lst, n): for x in lst: if x == n: return True return False 而不是: def contains(lst, n): for x in lst: if x == n: return True ? 请注意,在第二个示例中,最后一行代码缺失,函数返回None,而不是False 旁注:我知道我应该在lst中写n,这只是一个例子。我认为在某种程度上这

写作的好处是什么:

def contains(lst, n):
  for x in lst:
    if x == n:
      return True
  return False
而不是:

def contains(lst, n):
  for x in lst:
    if x == n:
      return True

请注意,在第二个示例中,最后一行代码缺失,函数返回
None
,而不是
False


旁注:我知道我应该在lst中写
n,这只是一个例子。

我认为在某种程度上这是个人偏好的问题

我个人总是喜欢前者而不是后者,因为


此外,如果函数预期返回
bool
,我认为返回
bool
而不是其他需要评估其真实性才能得到
bool

的对象会更干净。如果不显式返回任何内容,则返回值将为
None
。如果函数应该返回布尔值,那么确实应该显式返回
False


在您的情况下,
None
在隐式转换为
bool
时将计算为
False
,但我不会依赖于这种行为。基本上只是为了明确和提高可读性。

这实际上取决于您打算如何使用函数

如果它只在布尔上下文中使用,那么将其定义并记录为“返回真实或错误的内容”可能是有意义的,在这种情况下,将
None
返回为错误的内容是合理的

但是,如果您希望人们记录结果以进行人工调试,或者将其用作字典中的键,或者您不知道如何使用它,那么可以更清楚地说,它返回一个布尔值,然后显式返回
False

事实上,在你提供的东西上比你承诺的要严格,这通常是个好主意;即使您只记录返回的内容是真实的或虚假的,始终返回
True
False
,实际上也不会有什么坏处,除非您有其他有意义的值。*正如其他答案所暗示的,这不仅符合一般编程原则,而且符合特定的Python规则“显性比隐性好”


*如果您认为它可能会影响性能,即使这是一个问题,它也不会。隐式
返回None
符合与显式
返回None
返回值
完全相同的
加载常量
返回值
——或者,当然,显式
返回False
,值得注意的是,在大多数此类情况下现实生活中的例子,你不能只
在lst中返回n
,你仍然可以
返回任何(n***x代表lst中的x)
,其中
n***x
是你需要做的任何表达式。这也有助于让代码的读者清楚你的意图。缺少return语句可能会让读者自问,“他们忘了还东西了吗?我应该在这里输入一个返回语句来修复代码吗?“等等。尽量减少这些顾虑会使代码更易于阅读。@kqr:这一点很好。实现可能不如接口重要,但它仍然很重要,尤其是在Python中,人们可能会说“代码就是文档”,而不是在可读性较差的语言中…