【问题标题】:maximum recursion depth exceeded writing a simple function最大递归深度超过了写一个简单的函数
【发布时间】:2021-07-05 19:14:15
【问题描述】:
def AtomicWeight(Z: "int"):    
    return AtomicWeight(Z)
    
z = 1.45
AtomicWeight(z)
type(z)

有人能解释一下这个函数在做什么以及为什么它说超出了最大递归深度吗?我尝试增加最大递归,但它不起作用。还有其他写法吗?

【问题讨论】:

  • 你在函数体内调用函数本身。它被称为递归。你调用它一次,它再次调用该函数,它再次调用该函数等等......没有什么可以阻止无限调用。就目前这个功能而言,它没有太大意义。
  • 你会如何重写这个函数?另外,你能告诉我 (Z: "int") 是做什么的吗?
  • 它被称为type hint。它说Z 应该是一个整数。我也相信它是Z: int 而不是Z: "int"。无论如何,目前还不清楚你想用这个函数实现什么,因为它除了抛出一个 RecursionError 之外什么都不做。

标签: python function refactoring


【解决方案1】:

该函数一遍又一遍地调用自己,因为函数中没有return。调用函数x次后超出最大递归深度,Python停止运行代码。

可以通过将示例更改为:

def AtomicWeight(Z: "int"):
    return Z * 2  # times 2 is just example to let the function do something
z = 1.45
z = AtomicWeight(z)

现在AtomicWeight 函数不再调用自身并返回一个值。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多