当前位置: 首页 > 知识库问答 >
问题:

Python中的递归打字3.5[重复]

梁新觉
2023-03-14

在Python3.5中,添加了类型注释(参见此处)。

是否有一种定义递归类型注释的方法,例如针对树状结构?

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

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

name错误:未定义名称“员工”

共有1个答案

於彬
2023-03-14

您可以使用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 3.5中,添加了类型注释(请参见此处)。 有没有一种方法来定义递归类型注释,例如用于树状结构? 在上面,注释似乎无效。运行代码会导致以下错误: 问题答案: 您可以使用PEP 484中定义的正向引用 通常发生这种情况的情况是容器类的定义,其中定义的类出现在某些方法的签名中。例如,以下代码(简单的二进制树实现的开始)不起作用: 为了解决这个问题,我们写: 可以将字符串文字用

  • 问题内容: G’day, 我试图找到拖网字典的函数的递归深度,但我有点迷路了……目前,我有类似以下内容: 我想知道嵌套最多的字典是如何嵌套的…所以我要做以下… 唯一的问题是,递归循环仅返回最终值(0)的返回值。如果我输入一条打印语句, 那么我至少可以打印出最高的递归值,但是返回值是另一回事… 我敢肯定,这很简单-我刚买了果冻脑。 干杯 问题答案: 确保将递归调用的结果分配给 depth 。此外,正

  • 我试图编写一个方法,使用递归打印字符串的所有排列。现在,我有这样的代码: 它打印出正确的结果,但我试图在不使用循环的情况下解决它,包括第4行中的循环。可能吗?如果是这样,你会如何解决?非常感谢。 我试图添加第三个名为index的参数,并在第5行的递归调用中写入index 1,但没有成功。我认为添加第三个参数是个好主意,我只是不知道如何使用它。

  • 考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我

  • 12.3. Display,一个递归的值打印器 接下来,让我们看看如何改善聚合数据类型的显示。我们并不想完全克隆一个fmt.Sprint函数,我们只是构建一个用于调试用的Display函数:给定任意一个复杂类型 x,打印这个值对应的完整结构,同时标记每个元素的发现路径。让我们从一个例子开始。 e, _ := eval.Parse("sqrt(A / pi)") Display("e", e) 在

  • 我是编程新手,从Python开始。我的问题是关于链表,我为链表写了一个类,我需要做的是有一个函数,一个输入作为指向列表头部的引用。据我所知,'linked_list.Head',其中linked_list是有问题的列表的名称。具体使用递归,我试图找到列表的长度作为这个函数的输出。下面是我的代码,我不太明白如何移动到下一个节点,并在本例中使用递归返回节点数。