在嵌套函数之外使用变量

问题描述 投票:0回答:1
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        balanced = [True]
        
        def node_height(root):
            if not root or not balanced[0]:
                return 0
            
            left_height = node_height(root.left)
            right_height = node_height(root.right)
            
            if abs(left_height - right_height) > 1:
                balanced[0] = False
                return 0
            
            return 1 + max(left_height, right_height)
            
        node_height(root)
        return balanced[0]

我理解为什么上面的代码有效,但是当我将变量“balanced”的值更改为

balanced = True
代替第 3 行中的
balanced = [True]
和 在第 6、13 和 19 行将balanced[0]更改为balanced,出现错误。

class solution:
    def func(): 
        a = 5
        b = 7
        c = True
        def nested_func():
            return (a + b, c)
        return nested_func()
        
    print('sum is:', func())

所以我尝试了上面的代码来测试(也许嵌套函数无法获取具有布尔值作为值的变量),但能够得到“sum is: (12, True)”的结果 这表明嵌套函数能够获取其外部的变量。

有人可以解释一下吗?

python function nested
1个回答
0
投票

您可以使用

nonlocal
关键字来实现:

...
        balanced = True
        def node_height(root):
            nonlocal balanced
...
© www.soinside.com 2019 - 2024. All rights reserved.