在python中使None成为缺省返回值的理性是什么,而不是检查它是否为未初始化的变量

时间:2018-01-14 18:33:47

标签: python theory

在Python中,您可以声明一个不显式返回值的函数。例如,您可以写:

def launch_aborted():
    call_KimJongUn()
    # oops we forget to return a value

然后在if语句中成功使用它,例如:

if not launch_aborted():
    launch_ballistic_missile()

在类似情况下,使用未初始化的变量,Python会识别错误并引发异常。 Python不会将未初始化的变量视为无默认,就像处理函数返回值一样。

# if the variable launch_aborted wasn't assigned yet
# interpreter throws NameError or UnboundLocalError here
if not launch_aborted:
    # this code will not be exceuted
    launch_ballistic_missile()

此行为会掩盖错误。如果函数在其声明中有错误,如果不是它的所有控制路径都返回一个值,那么很难找到这个错误,因为默认情况下它返回None而None也是布尔表达式和赋值中的有效值。

除了简单的实施之外,我正在寻找这个设计决策的任何理由。我知道它需要在调用者中进行额外检查以跟踪此错误,并且可能会稍微降低性能,但这在这里看起来不是一个合理的参数,对变量状态的类似检查也会引入延迟。 / p>

1 个答案:

答案 0 :(得分:0)

如果您对自己解决此问题感兴趣,请查看type annotations。它们允许您明确指定您的函数是否可以返回None,然后键入mypy之类的检查器可以告诉您代码是否可能会中断。