鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 4

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

[复制链接]
发表于 2022-3-30 16:14:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 李二蛋 于 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,外层嵌套也被内层更改了,这是为啥呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-30 16:32:26 From FishC Mobile | 显示全部楼层
本地的变量声明为global,就不能在再声明为nonlocal
而且你这个需求也毫无道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 16:40:04 From FishC Mobile | 显示全部楼层
你把global和nonlocal都删掉,初始设置x = [1],下边的所有x全都改成x[0]

x=880和x=520都改成x[0] = 880 和x[0] = 520,print也改成x[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-30 16:40:51 | 显示全部楼层
wp231957 发表于 2022-3-30 16:32
本地的变量声明为global,就不能在再声明为nonlocal
而且你这个需求也毫无道理

不能使用二者的原因是只能变量声明只能使用一个么
我的需求就是用内层嵌套函数变量去改变外层和全局
毕竟刚学嘛就什么都想尝试,
我也不清楚有没有道理,我甚至不清楚应该用在哪里怎么用五五五五
感谢前辈指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-30 16:44:11 | 显示全部楼层
qq1151985918 发表于 2022-3-30 16:40
你把global和nonlocal都删掉,初始设置x = [1],下边的所有x全都改成x[0]

x=880和x=520都改成x[0] = 880 ...

前辈你这直接用列表索引去定义变量了,那么所有的变量都是一个值,这个我理解
我现在是刚学global和nonlocal语句想尝试一下嘛
都不太懂怎么用就自己瞎用也知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表