簡體   English   中英

在什么條件下必須在python中定義或初始變量

[英]In what condition must define or initial variable in python

我的程序有問題。 代碼如下:

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

該代碼無需初始化即可正常運行。 有人可以解釋一下區別嗎?

當您編寫i, j = 0, 0 ,您會將兩個變量都初始化為0

當您編寫i = 1 + 1 ,您正在將i初始化為2 ,並且因為這是在if True內的,所以始終會執行該代碼。 因此,您無需編寫if True因為它會產生相同的效果。

為了清楚起見,您始終需要在讀取變量之前初始化變量。 總是。 我的意思是,您對代碼的兩次更正實際上都在初始化這些變量。 這就是為什么他們工作。

條件總是。

需要定義要使用的變量。 如果條件為假,則未定義變量。

您可以改用三元語句來減輕問題

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)

我認為您應該在引用變量之前對其進行初始化。 在您的代碼中,max函數將i,j作為參數,因此i,j需要初始化。 if語句不能確保初始化,因此編譯器會給您錯誤。

如果為true:i = 1 +1

這段代碼只是給i賦值2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM