李二蛋 发表于 2022-3-30 16:14:49

如何在嵌套函数中修改全局变量同时修改函数变量

本帖最后由 李二蛋 于 2022-3-30 16:37 编辑

>>> x
1
>>> def funA():
        global x
        x = 880
        def funB():
                nonlocal x
                x = 520
                print('x in funB,x = ',x)
        funB()
        print('x in funA,x = ',x)
       
SyntaxError: no binding for nonlocal 'x' found

请问各位前辈,global语句和nonlocal语句不能同时用么

我想要达到的效果是输出
x in funB,x = 520
x in funA,x = 520
x
520

我测试成功了,连续用两个global语句就可以实现
>>> def funA():
        global x
        x = 880
        def funB():
                global x
                x = 520
                print('x in funB,x = ',x)
        funB()
        print('x in funA,x =',x)

       
>>> funA()
x in funB,x =520
x in funA,x = 520
>>> x
520

这是为啥呢,仅在嵌套函数内层使用global仅改变全局参数,但是在嵌套函数内层和外层同时使用global,外层嵌套也被内层更改了,这是为啥呀

wp231957 发表于 2022-3-30 16:32:26

本地的变量声明为global,就不能在再声明为nonlocal
而且你这个需求也毫无道理

qq1151985918 发表于 2022-3-30 16:40:04

你把global和nonlocal都删掉,初始设置x = ,下边的所有x全都改成x

x=880和x=520都改成x = 880 和x = 520,print也改成x

李二蛋 发表于 2022-3-30 16:40:51

wp231957 发表于 2022-3-30 16:32
本地的变量声明为global,就不能在再声明为nonlocal
而且你这个需求也毫无道理

不能使用二者的原因是只能变量声明只能使用一个么
我的需求就是用内层嵌套函数变量去改变外层和全局
毕竟刚学嘛就什么都想尝试,
我也不清楚有没有道理,我甚至不清楚应该用在哪里怎么用五五五五
感谢前辈指点

李二蛋 发表于 2022-3-30 16:44:11

qq1151985918 发表于 2022-3-30 16:40
你把global和nonlocal都删掉,初始设置x = ,下边的所有x全都改成x

x=880和x=520都改成x = 880 ...

前辈你这直接用列表索引去定义变量了,那么所有的变量都是一个值,这个我理解
我现在是刚学global和nonlocal语句想尝试一下嘛
都不太懂怎么用就自己瞎用也知道对不对
页: [1]
查看完整版本: 如何在嵌套函数中修改全局变量同时修改函数变量