Python 函数返回空值,Python在所有函数的末尾添加了隐式的return None
语句。因此,如果函数没有指定返回值,默认情况下会返回None
。
这意味着可以用纯return
语句替换return None
语句,也可以直接不写return
语句,结果完全相同:
def foo1(value):
if value:
return value
else:
return None
def foo2(value):
"""纯return语句,相当于`return None`"""
if value:
return value
else:
return
def foo3(value):
"""无return语句,也相当于`return None`"""
if value:
return value
如果向2这三个函数都传递假值,那么三个函数都能正常返回None
:布尔计算为False
的值。
>>> type(foo1(0))
<class 'NoneType'>
>>> type(foo2(0))
<class 'NoneType'>
>>> type(foo3(0))
<class 'NoneType'>
那么,什么情况下才应该在自己的Python代码中使用这个特性呢?
我的经验法则是,如果函数(有些语言将其称为过程)没有返回值,那么就忽略返回语句。在这种情况下添加返回语句不仅多余,而且会带来混乱。比如Python的内置print
函数就是一个过程,调用print
只是为了使用函数的副作用(打印文本),永远都不是为了获得该函数的返回值。
再来看看Python内置的sum
函数。这个函数显然具有一个逻辑返回值,并且通常不会仅为其副作用而调用sum
。sum
的目的是将一系列的数相加,然后传递结果。因此,如果一个函数从逻辑的角度来看有返回值,那么要自行决定是否使用隐式返回语句。
一方面,有人认为省略显式的return None
语句能让代码更简洁,因而更易于阅读和理解。主观上也可以说这让代码“更漂亮”了。
另一方面,有些程序员很惊讶Python有这样的行为。在编写干净和可维护的代码时,出乎意料的行为通常并不是一个好兆头。
一个代码示例使用了“隐式返回语句”。代码中没有对此进行说明,本意只是想用一个简短的代码示例解释Python中的其他功能。
然而最终我收到了源源不断的电子邮件,向我指出该代码示例中“缺少return
语句”。显然,并不是每个人都清楚理解Python的隐式返回行为,而且它在这个示例中还会令人分心。因此我又添加了一个注释来说明,之后就没有再收到这些电子邮件了。
不要误会,我也喜欢写出干净且“美丽”的代码。同时,我也强烈认为程序员应该清楚地了解正在使用的语言中有何细节。
不过,考虑到即使这种简单的误解对维护也有很大的影响,最好写出更明确清晰的代码,毕竟代码具有沟通作用。
Python 函数返回空值 关键要点
-
如果函数没有指定返回值,则返回
None
。是否明确地返回None
是风格方面的问题。 -
返回空值是Python的核心功能,但是使用显式的
return None
语句能更清楚地表达代码的意图。