Python 内部函数集与非局部函数集

标签 python set nested-function python-nonlocal

我相信我知道这个问题的答案,但想仔细检查一下,因为我发现这有点令人困惑。

def outerFunc():
    mySet = set()
    a = 0
    def innerFunc():
        mySet.add(1)
        mySet.add(2)
        a = 7
    innerFunc()
    print(mySet) # {1, 2}
    print(a) # 0

这里,如果我想改变a的值,我需要使用nonlocal 。集合发生变化的事实只是因为集合是通过引用传递的?那么,在内部函数中,我们可以访问外部函数变量的值,但不能修改它们,除非它们是引用?

最佳答案

可以查看python document

In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global.

因此,如果您分配了一个变量,并且没有 global 的变量只会影响局部变量。 例如,如果您将值分配给 mySet,那么它也不会更改。

def outerFunc():
    mySet = set()   
    def innerFunc():
        mySet = {1}
        mySet.add(2)
    innerFunc()
    print(mySet)  # ''

关于Python 内部函数集与非局部函数集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70388304/

相关文章:

Python:按名称访问嵌套函数

python - 获取 127.0.1.1 而不是 192.168.1.* ip ubuntu python

python - 如果 __name__ == '__main__' 不工作 ipython

python - 如何使用 spacy 对 python 中的列表列表进行词形还原?

java - Java 中 Set 和 SortedSet 接口(interface)之间的逻辑不一致

javascript - 如何调用 HTML DOM 事件对象(例如 : onclick, onblur 等)嵌套函数?

python - 在 python 中,是否需要在每个拆分文件中导入模块?

python - 字符串文字中的特殊字符

c++ - 无法移动集合迭代器

javascript - C# 本地函数与 JavaScript 嵌套函数之间有什么区别?