当前位置: 首页 > 面试题库 >

Python 3.5以上版本中的递归输入

苏鸿羽
2023-03-14
问题内容

在Python 3.5中,添加了类型注释(请参见此处)。

有没有一种方法来定义递归类型注释,例如用于树状结构?

class Employee(object):
    def __init__(self, name: str, reports: List[Employee]):
       self.name = name
       self.reports = reports

在上面,注释似乎无效List[Employee]。运行代码会导致以下错误:

NameError: name 'Employee' is not defined


问题答案:

您可以使用PEP 484中定义的正向引用

通常发生这种情况的情况是容器类的定义,其中定义的类出现在某些方法的签名中。例如,以下代码(简单的二进制树实现的开始)不起作用:

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

为了解决这个问题,我们写:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

可以将字符串文字用作类型提示的一部分,例如:

class Tree:
    ...
    def leaves(self) -> List['Tree']:


 类似资料:
  • 问题内容: 在开发Python代码时,通常会在解释器中以即席方式对其进行测试。我将对其进行测试,找到一个错误,修复该错误并保存,然后使用内置函数进行再次测试。 但是,假设我有,并且在测试时发现了一个错误并进行了修复。现在调用不会递归地重新导入。我必须手动重新导入依赖项(通过执行类似,或的操作,或者,如果我更改了一大堆依赖项并丢失了需要重新加载的内容的信息,则需要重新启动整个解释器。 更为方便的是,

  • 问题内容: 我有一个嵌套的字典对象,并且希望能够检索具有任意深度的键的值。我可以通过子类化做到这一点: 但是,我不需要子类化即可获得此行为。是否有一些内置方法具有相同或相似的行为?如果不是,是否有任何提供此行为的标准或外部模块? 我目前正在使用Python 2.7,尽管我也很好奇也听说过3.x解决方案。 问题答案: 一个非常常见的模式是使用空dict作为默认值: 如果您有多个键,则可以使用(请注意

  • 我很难理解尾递归的概念,我想做一个斐波那契函数的尾递归版本,到目前为止,这是我想出的,但我不知道它是否正确,有人能帮我吗,任何帮助都将不胜感激 代码编译并输出正确的结果

  • 我有脚本谁搜索最近的搜索号码。例如,假设数组中有以下数字: '0' = '0.25' = '0.75'= '1' = 我正在寻找0.50的差点,所以0.25和0.75在0.50的相同范围内。 在这种情况下,我想得到更大的数值,在这个例子中是0.75。 有效的代码是: 我知道我可以在这里使用递归,但我没有使用递归的经验。我知道我需要这样称呼它: 但即使我转储函数输出,也会得到空白页。

  • 嗨,我在理解为什么我的递归逻辑返回第一个输入时有一些问题,尽管它似乎没有通过验证检查。Java中的一个简单例子: 我的理解是,函数要调用自己,直到满足条件,返回一个0到9之间的数。条件检查似乎是可行的,但是无论第一个数字是什么,总是被返回。一个执行示例产生:

  • 我很难理解尾部递归的概念,我想为类似斐波那契函数a(n-3)a(n-2)制作一个尾部递归版本,到目前为止,这是我提出的,但我不知道这是否是一个正确的方法,有人能帮我吗,任何帮助都将不胜感激 代码输出正确的结果 但是当我实现尾部递归时,我的方法是分而治之的,但它不起作用,输出是错误的