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中,人们可能会说“代码就是文档”,而不是在可读性较差的语言中…