首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python作用域-子作用域应该可以访问父作用域吗?

python作用域-子作用域应该可以访问父作用域吗?
EN

Stack Overflow用户
提问于 2020-01-03 18:51:53
回答 2查看 229关注 0票数 1

根据我所读到的here,子作用域应该可以访问父作用域中定义的变量。然而,在我的例子中,我在count上得到了一个未解决的错误。为什么会发生这种事?

代码语言:javascript
复制
def find_kth_largest_bst(root, k):
        count = 0
    def _find_kth_largest_bst(root, k):
        if not root:
            return None

        _find_kth_largest_bst(root.right, k)
        count += 1 #unresolved error here??
        pass
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-03 19:06:22

可以使用nonlocal关键字从父作用域访问变量。

代码语言:javascript
复制
def find_kth_largest_bst(root, k):
    count = 0
    def _find_kth_largest_bst(root, k):
        nonlocal count  # This will access count from parent scope
        if not root:
            return None

        _find_kth_largest_bst(root.right, k)
        count += 1
        pass
票数 2
EN

Stack Overflow用户

发布于 2020-01-03 19:15:15

您要做的是使用内部函数,这与类继承不同。另一个非常相似的例子是:

Python nested functions variable scoping

从这个问题中,有一个回答是:

“有关Scopes和命名空间的文档说明如下:

Python的一个特殊特点是--如果没有有效的全局语句--名称的分配总是进入最内部的范围。赋值不复制数据--它们只是将名称绑定到对象。

这意味着您可以使用globalnonlocal语句解决错误。

代码语言:javascript
复制
def find_kth_largest_bst(root, k):
    global count
    count = 0
    def _find_kth_largest_bst(root, k):
        if not root:
            return None

        _find_kth_largest_bst(root.right, k)
        count += 1 #unresolved error here??
        pass

这里的另一件事是,count = 0有双制表符,或8个空格,而它应该只有一个空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59583819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档