返回语句后,Python函数是否继续运行?

时间:2020-09-21 18:44:35

标签: python

以下函数以TypeError结尾:不支持的操作数类型float和NoneType。 基本情况如何触发return None,程序继续执行factorial() = None。至少这是我的看法。

def factorial(i):
  if i < 0:
    return None # Why does the program not stop here?...
  if i == 0:
    return 1
  return i * factorial(i-1) #factorial(i-1) returns None after i < 0?

print(factorial(3.01))

2 个答案:

答案 0 :(得分:1)

由于在函数中调用了return i * factorial(i-1),而factorial(i-1)的求值结果是None,因此出现了该错误。

它评估为None的原因是您提供的输入值-3.01-这将导致以下结果:

factorial(3.01) # returns 3.01 * factorial(3.01-1)
factorial(2.01) # returns 2.01 * factorial(2.01-1)
factorial(1.01) # returns 1.01 * factorial(1.01-1)
factorial(0.01) # returns 0.01 * factorial(0.01-1)
factorial(-0.99) # returns None (because i < 0)

因此,行0.01 * None在运行,这会导致您的错误。

答案 1 :(得分:1)

函数中的最后一个递归调用是

return 0.01 * factorial(-0.99)

factorial(-0.99)调用if i < 0:大小写,因此它返回None。然后上面的代码尝试乘以0.01 * None,这将导致您得到错误。

您对factorial的定义仅对非负整数有效。