簡體   English   中英

Python 中對局部和全局變量 scope 的說明

[英]Clarification on local and global variable scope in Python

對於在 function scope 之外引用的局部和全局變量,我有點困惑。 對於一個問題,我有這段代碼並且它有效:

def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
    l1 = []
    l2 = []
        
    def traverseLeaf(root: TreeNode, sequence: list): 
        if not root: return 
        elif not root.left and not root.right: sequence.append(root.val)
        else: 
            traverseLeaf(root.left, sequence)
            traverseLeaf(root.right, sequence)
                
    traverseLeaf(root1, l1)
    traverseLeaf(root2, l2)
        
    return l1 == l2

您可以看到我在 function scope 之外引用了列表 object。 但是,如果我嘗試這個:

# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def convertBST(self, root: TreeNode) -> TreeNode:
        total = 0
               
        def rightOrderTraversal(node: TreeNode):
            if not node: return
            elif not node.left and not node.right: 
                total += node.val
                node.val = total
            else: 
                rightOrderTraversal(node.right)
                total += node.val
                node.val = total
                rightOrderTraversal(node.left)                
            
        rightOrderTraversal(root)
        return root

它不起作用,並且錯誤說我在調用rightOrderTraversal時將 total 引用為局部變量。 Python 為哪些變量創建局部引用? 從這些示例中,似乎 Python 引用了 function scope 之外的列表,但不是整數。

我還嘗試將total global作為解決問題的一種方式,但這並沒有奏效。

如果要使用對 object 實例中的任何方法/子函數可見的變量,則使用“self”來引用 object 實例,例如:

class Solution:
   
    def my_method(self, total):
        self.total = total
               
        def my_function(total):
            self.total += total

        my_function(total)

s = Solution()
s.my_method(1)
print(s.total)

暫無
暫無

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

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