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

时间:2014-11-05 21:18:58

标签: 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

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

3 个答案:

答案 0 :(得分:5)

我认为这在某种程度上取决于个人偏好。

我个人总是更喜欢前者而不是后者,因为"explicit is better than implicit"

此外,如果预期函数返回bool,我认为返回bool更清晰,而不是其他需要评估其真实性的对象才能获得bool

答案 1 :(得分:4)

这实际上取决于您打算如何使用该功能。

如果它只在布尔上下文中使用,那么将它定义并记录为“返回一些真实或虚假的东西”可能是有意义的,在这种情况下将None作为假设返回是合理的

但是,如果您希望人们将结果记录下来用于人工调试,或者将其用作词典中的键 - 或者您只是不知道它将如何被使用 - 那么它说得更清楚了它返回一个布尔值,然后显式返回False

事实上,要比你所提供的更严格,这通常是一个好主意;即使你只记录你正在返回一些真实或虚假的东西,它实际上也不会伤害总是返回TrueFalse,除非你有其他值可能是有意义的。*正如其他答案所暗示的那样,这不仅仅符合一般的编程原则,而且还有特定的Python Zen“显然优于隐式”。

*如果你认为它会影响性能,那就不会,即使这是一个问题。隐式return None符合完全相同的LOAD_CONSTRETURN_VALUE作为明确的return None - 或者当然是明确的return False < / p>

答案 2 :(得分:3)

如果您没有明确返回任何内容,则返回值为None。如果函数应该返回一个布尔值,那么你真的应该显式返回False

在您的情况下,None会在隐式转换为False时评估为bool,但我不会依赖此类行为。基本上只是为了明确并提高可读性。