鱼C论坛

 找回密码
 立即注册
查看: 2708|回复: 1

[已解决]函数local variable referenced before assignment

[复制链接]
发表于 2023-2-17 15:22:44 | 显示全部楼层 |阅读模式

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

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

x
求教大神们!
def funB():
    num = 0
    def funA():
        num = 1 + 1
        return num
    return funA
或者
def funB():
    num = 0
    def funA():
        temp = num + 1
        return num
    return funA

都不会出错,而这样写就会出错,为什么呢?
def funB():
    num = 0
    def funA():
        num = num + 1
        return num
    return funA

a = funB()
a()
会出错。local variable 'num' referenced before assignment

最佳答案
2023-2-17 15:37:56
因为你给 num 赋值的话就说明 num 是一个局部变量,但是局部变量不能在赋值之前使用

num = num + 1 是先完成右边的计算再赋值给左边,也就是你的 num 在赋值之前使用了,所以报错,

你得在 num = num + 1 之前加一个 nonlocal num 来说明 num 不是局部变量
def funB():
    num = 0
    def funA():
        nonlocal num
        num = num + 1
        return num
    return funA

a = funB()
a()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-17 15:37:56 | 显示全部楼层    本楼为最佳答案   
因为你给 num 赋值的话就说明 num 是一个局部变量,但是局部变量不能在赋值之前使用

num = num + 1 是先完成右边的计算再赋值给左边,也就是你的 num 在赋值之前使用了,所以报错,

你得在 num = num + 1 之前加一个 nonlocal num 来说明 num 不是局部变量
def funB():
    num = 0
    def funA():
        nonlocal num
        num = num + 1
        return num
    return funA

a = funB()
a()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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