找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2533|回复: 2

[求助] 命名空间的问题

4

主题

24

帖子

24

积分

贫民

积分
24
pythonCXZ 发表于 2020-8-10 16:28:41 | 显示全部楼层 |阅读模式


test = "全局"
def testnamespace1(test):
    print (test)
    test = "函数内部"
    def testnamespage2():
        print (test)
        test = "函数的函数内部"
        print(test)
    return testnamespage2


t = testnamespace1(test)
t()


看似没问题,实则无法运行,会有异常UnboundLocalError: local variable 'test' referenced before assignment

如果注释掉namespage2 里面的print(test)就可以顺利执行,

想请问大佬们,这是怎么回事,一个print语句怎么能报错呢?





回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-8-11 15:06:31 | 显示全部楼层
本帖最后由 sheeboard 于 2020-8-11 15:11 编辑

函数不用实例化,类才要实例化。引用同名local 变量前面加global
回复 支持 反对

使用道具 举报

0

主题

30

帖子

30

积分

贫民

积分
30
胡扶林 发表于 2020-8-14 16:57:36 | 显示全部楼层
在testnamespage2函数的第一行写上 nonlocal  test
如果在闭包的内部函数中直接使用外部函数的变量时,不需要任何操作,直接使用就可以了。
但是如果要修改外部变量的值,需要将变量声明为 nonlocal
nonlocal 声明变量为非本地变量,如果确定在程序要修改外部变量,那么建议将 nonlocal 写在内部函数的第一行。
回复 支持 反对

使用道具 举报

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

本版积分规则

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