给定以下 Python 代码:
def avg(a):
if len(a):
return sum(a) / len(a)
avg
当 的长度a
为零或语言未指定其行为因此不应在 Python 代码中计算时,语言定义的行为是什么?
如果len(a)
is 0
,那将被视为False
-like 值,并且您的return
语句将无法到达。当控制流脱离函数底部而没有到达显式return
语句时,Python 函数会隐式返回None
:
>>> print(avg([]))
None
Iflen(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()