写作有什么好处:
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
,这只是一个例子。
答案 0 :(得分:5)
我认为这在某种程度上取决于个人偏好。
我个人总是更喜欢前者而不是后者,因为"explicit is better than implicit"。
此外,如果预期函数返回bool
,我认为返回bool
更清晰,而不是其他需要评估其真实性的对象才能获得bool
。
答案 1 :(得分:4)
这实际上取决于您打算如何使用该功能。
如果它只在布尔上下文中使用,那么将它定义并记录为“返回一些真实或虚假的东西”可能是有意义的,在这种情况下将None
作为假设返回是合理的
但是,如果您希望人们将结果记录下来用于人工调试,或者将其用作词典中的键 - 或者您只是不知道它将如何被使用 - 那么它说得更清楚了它返回一个布尔值,然后显式返回False
。
事实上,要比你所提供的更严格,这通常是一个好主意;即使你只记录你正在返回一些真实或虚假的东西,它实际上也不会伤害总是返回True
或False
,除非你有其他值可能是有意义的。*正如其他答案所暗示的那样,这不仅仅符合一般的编程原则,而且还有特定的Python Zen“显然优于隐式”。
*如果你认为它会影响性能,那就不会,即使这是一个问题。隐式return None
符合完全相同的LOAD_CONST
和RETURN_VALUE
作为明确的return None
- 或者当然是明确的return False
。 < / p>
答案 2 :(得分:3)
如果您没有明确返回任何内容,则返回值为None
。如果函数应该返回一个布尔值,那么你真的应该显式返回False
。
在您的情况下,None
会在隐式转换为False
时评估为bool
,但我不会依赖此类行为。基本上只是为了明确并提高可读性。