【问题标题】:What is the defined behavior in Python for no return statement being reached?Python 中定义的未达到 return 语句的行为是什么?
【发布时间】:2013-02-12 15:34:21
【问题描述】:

给定以下 Python 代码:

def avg(a):
  if len(a):
    return sum(a) / len(a)

a 的长度为零或语言未指定其行为因此不应在 Python 代码中计算时,avg 的语言定义行为是什么?

【问题讨论】:

  • 请注意,测试起来非常简单 - def test(): pass print(test())
  • 但如果行为未定义,则此类测试的结果可能会因一种实现而异。
  • 确实如此,尽管未定义将是一件相当大的事情。

标签: python return


【解决方案1】:

默认返回值为None

来自documentation on Calls

调用总是返回一些值,可能是None,除非它引发异常。这个值的计算方式取决于可调用对象的类型。

【讨论】:

  • 值得注意的是,这也适用于return语句——如果没有下面的表达式,则完全等价于return None。这对于显式结束函数很有用,您不想显式给出返回值(它表明目的是结束函数,而不是返回 None 作为值)。
【解决方案2】:

如果len(a)0,那将被视为类似False 的值,并且您的return 语句将无法到达。当控制流从函数底部退出而没有达到显式 return 语句时,Python 函数会隐式返回 None

>>> print(avg([]))
None

如果len(a) 没有定义——换句话说,如果对象没有__len__() 方法——你会得到一个TypeError

>>> print(avg(False))
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in avg
TypeError: object of type 'bool' has no len()

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2011-11-04
    • 2016-04-13
    • 1970-01-01
    • 2011-06-23
    • 2015-03-28
    相关资源
    最近更新 更多