2017-09-20 91 views
0

我正在測試一個非常簡單的python腳本。函數功能並不重要,我的問題,我的問題是下面的代碼以某種方式給我:Python變量作用域,分配之前引用的變量

File "test.py", line 13, in traverse 
    if root.val > minVal and ans > root.val: 
UnboundLocalError: local variable 'ans' referenced before assignment 

,但我有ans定義,爲何不抱怨minVal,但確實對ans

class Test(object): 

    def findSecondMinimumValue(self, root): 
     """ 
     :type root: TreeNode 
     :rtype: int 
     """ 
     minVal = root.val 
     ans = float("inf") 

     def traverse(root): 
      if not root: 
       return 

      if root.val > minVal and ans > root.val: 
       ans = root.val 

      traverse(root.left) 
      traverse(root.right) 

     traverse(root) 
     return ans if ans != float("inf") else -1 
+3

因此,您將'ans = ...'指定爲'ans = ...',並將'traverse'函數中的'ans'視爲本地。請注意,此分配在此處沒有用處,因爲您只設置參考。 –

+0

啊,我是如何轉儲,謝謝你的回答,我現在明白了! – user2002692

回答

1

裏面的功能traverse要定義一個新的變量ANS,這無關你上面定義的答。如果你想使用相同的變量,把nonlocal ans放在你的traverse函數的頂部。

+0

我現在明白了,謝謝! – user2002692

相關問題