imchengxin 发表于 2020-4-4 20:35:02

请问没用nonlocal为什么下面代码依然能正常运行

无论x是在函数内还是函数外被定义,函数没有用nonlocal,但却都识别了x的值,为什么呢?
>>> def abc():
        x=3
        def ccc():
                a=2*x
                return a
        return ccc()

>>> abc()
6

-----------------------------------------


>>> x=5
>>> def abc():
        def ccc():
                a=2*x
                return a
        return ccc()

>>> abc()
10

BngThea 发表于 2020-4-4 20:42:32

因为这些x的作用域涵盖了闭包函数ccc

qiuyouzhi 发表于 2020-4-4 20:45:26

可以识别,但是不能赋值。
所以你单独访问x的值是可以的,
就是不能x *= x这样的。

sunrise085 发表于 2020-4-4 20:58:02

_荟桐_ 发表于 2020-4-4 22:33:45

可以访问,不可以修改

zltzlt 发表于 2020-4-5 13:19:36

可以访问,但是不能修改。修改就要加 nonlocal 或者 global 。
页: [1]
查看完整版本: 请问没用nonlocal为什么下面代码依然能正常运行