私はleetcodeの問題をやっています - rightSideView. 内部ヘルパー関数を作成すると、外部関数変数にアクセスできると思いました。ただし、これは結果 (リスト) にのみ当てはまり、maxHeight (int) には当てはまりません。以下で参照されるコード:
class Solution(object):
def rightSideView(self, root):
result = []
maxHeight = 0
def dfs(node, height):
if node is not None:
height += 1
if height > maxHeight:
maxHeight = height
result.append(node.val)
dfs(node.right, height)
dfs(node.left, height)
dfs(root, 0)
return result
これは、self.maxHeight; を参照すると修正できます。ただし、結果のために同じことをする必要はありません。どうしてこれなの?リストがPythonのクラス内のグローバル変数として作成される可能性はありますか? これを他にどのように説明すればよいかわかりません。
次のコードはエラーなしで動作します。
class Solution(object):
def rightSideView(self, root):
result = []
self.maxHeight = 0
def dfs(node, height):
if node is not None:
height += 1
if height > self.maxHeight:
self.maxHeight = height
result.append(node.val)
dfs(node.right, height)
dfs(node.left, height)
dfs(root, 0)
return result