[英]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.