鱼C论坛

 找回密码
 立即注册
查看: 2933|回复: 20

[已解决]Python求助

[复制链接]
发表于 2016-8-31 19:05:24 | 显示全部楼层 |阅读模式
1鱼币
s=4
def fun1():
   
   
    s=6
    return s
fun1()
print(fun1())
这个可以


s=4
def fun1():
   
   
    s=6+s
    return s
fun1()
print(fun1())
这个不行!      
为什么同样是改变全局变量的s第一个可以第二个不行 求解释 谢谢
最佳答案
2016-8-31 19:05:25
在第二个函数体中,s作为局部变量并没有被定义,只是让函数func1()返回s+6的值,但是不知道s是多少啊。
我根据你的这个函数重新写了个,可以参考下:
>>> s=4
>>> def fun():
        a=6
        a=a+s
        return a

>>> fun()
10
>>>

最佳答案

查看完整内容

在第二个函数体中,s作为局部变量并没有被定义,只是让函数func1()返回s+6的值,但是不知道s是多少啊。 我根据你的这个函数重新写了个,可以参考下: >>> s=4 >>> def fun(): a=6 a=a+s return a >>> fun() 10 >>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-31 19:05:25 | 显示全部楼层    本楼为最佳答案   
在第二个函数体中,s作为局部变量并没有被定义,只是让函数func1()返回s+6的值,但是不知道s是多少啊。
我根据你的这个函数重新写了个,可以参考下:
>>> s=4
>>> def fun():
        a=6
        a=a+s
        return a

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

使用道具 举报

发表于 2016-8-31 19:39:58 | 显示全部楼层
你就不会写个好点的标题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-31 20:47:20 | 显示全部楼层
SixPy 发表于 2016-8-31 19:39
你就不会写个好点的标题?

你到底会不会解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-31 21:08:39 | 显示全部楼层
如果不使用global关键字引用全局变量,直接赋值是不可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-31 21:15:40 | 显示全部楼层
局部变量和全局变量是不同变量虽然都是s,第一个你只是定义了局部变量,打印了局部变量,第二个你还没有定义就用,这应该会报错吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-31 23:29:55 | 显示全部楼层
小月from1988 发表于 2016-8-31 20:57
在第二个函数体中,s作为局部变量并没有被定义,只是让函数func1()返回s+6的值,但是不知道s是多少啊。
我 ...

你这个函数里面的S也是局部变量啊 为什么就可以运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-1 08:51:25 | 显示全部楼层
温小小 发表于 2016-8-31 23:29
你这个函数里面的S也是局部变量啊 为什么就可以运算

python在函数内部调用全局变量或者调用和全局变量同名的变量的时候,也就是你这里的s,它会自动将这个变量看作局部变量。而你的那个程序里,调用s的时候,当作局部变量调用,结果发现局部变量s并没有被赋值,所以报错。
我昨天写的那个程序有点偷换变量的意思了,今儿重新写了一个,如下:
>>> s=4
>>> def fun():
        global s
        s=s+6
        return s

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

使用道具 举报

 楼主| 发表于 2016-9-1 08:58:51 | 显示全部楼层
小月from1988 发表于 2016-9-1 08:51
python在函数内部调用全局变量或者调用和全局变量同名的变量的时候,也就是你这里的s,它会自动将这个变 ...

你好 ,谢谢你热心回答,我现在想问的是为什么你那个s没有声明是全局变量,但在运算a=a+s的时候,程序不会报错说你那个S是局部变量不能这么用,反而是最为全局变量里面的S在进行运算呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-1 10:14:56 | 显示全部楼层
温小小 发表于 2016-9-1 08:58
你好 ,谢谢你热心回答,我现在想问的是为什么你那个s没有声明是全局变量,但在运算a=a+s的时候,程序不会 ...

因为我后来定义的函数,return a,而不是return s。我的返回值a在函数体内有初值的,这样说你能明白吗?

我也是初学者,其实之前写程序联系的时候老出现你说的那种错误,我就自己瞎改,就改对了,具体原因我也不太清楚。现在看到你说这个问题,我刚开始研究的,如果你知道比我的答案更具体更准确,麻烦也告诉我下,我的答案只是我个人理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-1 11:16:21 | 显示全部楼层
方法中对于没有定义过的变量是不能进行赋值运算的操作的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-1 19:02:34 | 显示全部楼层
小月from1988 发表于 2016-9-1 10:14
因为我后来定义的函数,return a,而不是return s。我的返回值a在函数体内有初值的,这样说你能明白吗?
...

我试了一下改成returna s一样可以操作不会报错啊!所以你回答的不正确喔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 10:39:55 | 显示全部楼层
s不是全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 11:52:14 | 显示全部楼层
你没给S赋值就调用S,当然会报错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 17:38:01 | 显示全部楼层
最好用global定义,如果要使用外部变量的话。而且这只是玩具代码,真正开发不会这么写的,要避免歧义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 21:05:53 | 显示全部楼层
第二个s没有定义就赋值 会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-4 17:53:58 | 显示全部楼层
第一个函数中是访问全局变量,第二个函数中你要在函数体内改变函数变量S,自然会报错啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-18 15:29:33 | 显示全部楼层
global全局变量,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-21 20:27:15 | 显示全部楼层
第二个有问题啊,里面的s是局部变量,调用不了上一层的s=4,所以你的函数里s是没有定义值的,是有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-9 23:52:53 | 显示全部楼层
变量作用域的问题,s是全局变量了,不可以在函数内部改变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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