鱼C论坛

 找回密码
 立即注册
查看: 1752|回复: 11

[已解决]第18课 动动手第一题

[复制链接]
发表于 2017-5-26 17:29:11 | 显示全部楼层 |阅读模式

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

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

x
为什么这样不行?

b = 0
result = 0

def dds(*sum1):

    sum1 = list(sum1)
    a = sum1.pop()

    if a != 5:
        sum1.append(a)
        for i in sum1:
            b = b + 1
        result = b * 3

    else:
        for i in sum1:
            b = b + 1
        result = b * 5

    print (result)

会提示
        local variable 'b' referenced before assignment

求大大们,解答
最佳答案
2017-5-26 18:25:55
这个问题很囧,在外面定义了一个变量 xxx ,然后在Python的一个函数里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before assignment,错误的意思就是xxx这个变量在引用前还没有定义。原来在python的函数中和全局变量同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了。如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-26 18:25:07 | 显示全部楼层
作用域的问题
在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 18:25:55 | 显示全部楼层    本楼为最佳答案   
这个问题很囧,在外面定义了一个变量 xxx ,然后在Python的一个函数里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before assignment,错误的意思就是xxx这个变量在引用前还没有定义。原来在python的函数中和全局变量同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了。如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 18:27:04 | 显示全部楼层
如果觉得满意,请设为最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 18:47:26 | 显示全部楼层
b 是全局变量, 你在函数内部试图对b这个变量重新赋值 ,当然会出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 18:48:15 | 显示全部楼层
本帖最后由 yongxi 于 2017-5-26 18:49 编辑
  1. b = 0
  2. result = 0

  3. def dds(*sum1):
  4.     global b

  5.     sum1 = list(sum1)
  6.     a = sum1.pop()

  7.     if a != 5:
  8.         sum1.append(a)
  9.         for i in sum1:
  10.             b = b + 1
  11.         result = b * 3

  12.     else:
  13.         for i in sum1:
  14.             b = b + 1
  15.         result = b * 5

  16.     print (result)
复制代码

定义函数dds 的时候 加上 global b  就OK了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-5-26 19:27:21 | 显示全部楼层
大大们的回答都完美解决了我的问题额,非常感谢给位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 09:06:11 | 显示全部楼层
Messj 发表于 2017-5-26 18:25
这个问题很囧,在外面定义了一个变量 xxx ,然后在Python的一个函数里面引用这个变量,并改变它的值,结果 ...

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

使用道具 举报

发表于 2017-5-28 20:34:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 15:46:03 | 显示全部楼层
你确定能运行,我运行不动啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-28 15:49:13 | 显示全部楼层
b = 0
result = 0


def mFun(*sum1):
    global b

    sum1 = list(sum1)
    a =sum1.pop()

    if a != 5:
        sum1.append(a)
        for i in sum1:
            b += i
            result = b * 3
    else:
        for i in sum1:
            b += i
            result = b * 5

    return result
    print(mFun(*sum1))
   
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-28 15:50:52 | 显示全部楼层
这样才能运行,你那个调用的话调用不了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 23:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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