鱼C论坛

 找回密码
 立即注册
查看: 6013|回复: 8

[已解决]019课后题:看了答案不太理解,求解惑

[复制链接]
发表于 2016-9-25 19:49:34 | 显示全部楼层 |阅读模式

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

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

x
  1. var = 'Hi'

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     return fun2(var)

  6. def fun2(var):
  7.     var += 'I love you'
  8.     fun3(var)
  9.     return var

  10. def fun3(var):
  11.     var = '小甲鱼'
  12.    


  13. print(fun1())
  14. print(fun2(var))
  15. print(fun3(var))
复制代码


输出结果:
Baby I love you
Baby I love you
None

问题:
整个代码的逻辑都不太懂,
1、调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?
2、var = 'Hi'  怎么理解,后边根本没有他什么事
3、global var   里面的global 是什么函数吗?为什么在IDLE里边变红?这里他出现的意义是什么?
4、为什么前两个输出结果是‘ Baby I love you’?
为什么第三个是‘None’?
最佳答案
2016-10-9 09:49:33
var='hi',只是在给var赋值而已,为了考我们最后输出的是否有人会认为有Hi,
global这里是将var全局化,这样就可以在整个代码段都可以调用这个变量,建议你再看一下这节课。
输出两个baby我爱你是因为fun2的作用啊,return var,var=baby i love u.返回的不是fun3(var),返回的是变量值。
我能理解的大概是这么多。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-9 09:49:33 | 显示全部楼层    本楼为最佳答案   
var='hi',只是在给var赋值而已,为了考我们最后输出的是否有人会认为有Hi,
global这里是将var全局化,这样就可以在整个代码段都可以调用这个变量,建议你再看一下这节课。
输出两个baby我爱你是因为fun2的作用啊,return var,var=baby i love u.返回的不是fun3(var),返回的是变量值。
我能理解的大概是这么多。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-9 09:54:28 | 显示全部楼层
第三个返回None,应该是因为printfun3(),fun3其实并没有打印值,但是python就算没有输出,也会有返回值,none
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-9 20:46:10 | 显示全部楼层
曾曾曾曾 发表于 2016-10-9 09:54
第三个返回None,应该是因为printfun3(),fun3其实并没有打印值,但是python就算没有输出,也会有返回值,no ...

谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后题都是坑啊。。
有一点就是print(fun2(var))
var += 'I love you'      var = var +'I love you'
   因为var已经被定义为全局变量=' Baby ',所以,这时候, var =Baby I love you;
fun3(var)函数,定义了 var = '小甲鱼'  ,但是最后return var的结果是Baby I love you,是否说明了fun3()函数内部定义的var仅仅是局部参数,不起作用,因为var在调用fun1()的时候已经定义过了??
但是var = ' Baby ',也是在fun1()内部定义的,只不过前面加了global var;
难道前面已经将var定义为全局变量以后,我在后面fun3()里面再定义var = '小甲鱼',不起作用吗?
我总感觉print(fun2(var))的结果应该是 小甲鱼  I love you
这个地方还是有点模糊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-10 16:57:59 | 显示全部楼层
人zai旅途 发表于 2016-10-9 20:46
谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后 ...

是的,不能修改全局变量,只能使用全局变量。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-19 21:21:53 | 显示全部楼层
人zai旅途 发表于 2016-10-9 20:46
谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后 ...


@无符号整形 ,大神,再次复习到这个题目,还是对这个地方有点疑问:
1、1、调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?Python的实现机制是什么?
2、var = ' Baby ',是因为在fun1()定义的global var;
这里,已经将var定义为全局变量,为什么,我在后面fun3()里面再定义var = '小甲鱼',不起作用吗?
是需要在fun3()里面再次global var 是吗?
我总感觉print(fun1())、print(fun2(var))的结果应该是 小甲鱼  I love you


大神,有空来解惑哈?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-20 07:55:37 | 显示全部楼层
人zai旅途 发表于 2016-11-19 21:21
@无符号整形 ,大神,再次复习到这个题目,还是对这个地方有点疑问:
1、1、调用fun1()的时候,fun2() ...

1.调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?Python的实现机制是什么?
答:当你调用fun2的时候,Python会自动找到fun2的声明部分然后执行
另外你在主部分调用时fun1时,fun2已经在前面了
2.的确不起作用。因为fun3中var='小甲鱼',实际上是定义了一个var局部变量,值是'小甲鱼'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-20 17:07:43 | 显示全部楼层
无符号整形 发表于 2016-11-20 07:55
1.调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理 ...

谢谢大神回复。
global 只能在定义函数的时候,起一次作用,是吗?如果想让fun3()里面var = '小甲鱼',需要再次global var ,是吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-23 23:44:36 | 显示全部楼层
全局变量的问题,我刚好遇到。。。就是让变量不会因为def结束而失效
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 22:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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