在什么条件下必须在python中定义或初始变量

时间:2018-01-02 06:43:02

标签: python python-3.x

我的程序有问题。代码如下:

def getHeight(self,root):
    #Write your code here
    if not root:
        return -1
    if root.left:
        i = self.getHeight(root.left) + 1
    if root.right:
        j = self.getHeight(root.right) + 1
    return max(i, j)

引发错误:

Traceback (most recent call last):
File "solution.py", line 37, in 
 height=myTree.getHeight(root)
File "solution.py", line 23, in getHeight
 i = self.getHeight(root.left) + 1
File "solution.py", line 23, in getHeight
 i = self.getHeight(root.left) + 1
File "solution.py", line 27, in getHeight
 return max(i, j)
UnboundLocalError: local variable 'i' referenced before assignment

如果我添加i, j = 0, 0,它会运作良好。

以下代码:

if True:
    i = 1 + 1

代码在没有初始化的情况下运行良好。 有人可以解释一下这个区别吗?

3 个答案:

答案 0 :(得分:1)

当您编写i, j = 0, 0时,您正在将这两个变量初始化为0

当您撰写i = 1 + 1时,您正在将i初始化为2,因为这位于if True内,该代码 始终< / em> 已执行。因此,您不需要编写if True,因为它会产生相同的效果。

要清楚,在阅读之前总是需要初始化变量。总是。我所说的是,你的代码的两个更正确实正在初始化这些变量。这就是他们工作的原因。

答案 1 :(得分:0)

条件总是如此。

需要定义变量才能使用。如果条件为假,则不定义变量。

您可以使用三元语句来缓解问题

def getHeight(self,root):
    if not root:
        return -1
    i = self.getHeight(root.left) + 1 if root.left else 0
    j = self.getHeight(root.right) + 1 if root.right else 0
    return max(i, j)

答案 2 :(得分:0)

我认为你应该在引用之前初始化变量。 在你的代码中,max函数以i,j为参数。因此,i,j需要初始化。 if语句无法确保初始化,因此编译器会给你错误。

  

如果为真:i = 1 + 1

此代码只为i赋值2.