鱼C论坛

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

19讲课后练习题变量作用域有些迷惑,请大家帮忙看看。

[复制链接]
发表于 2016-8-27 19:05:33 | 显示全部楼层 |阅读模式

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

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

x
var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):
    var = ' 小甲鱼 '

print(fun1())


这是帅气的小甲鱼老师@小甲鱼兢兢业业给留的课后作业。但是我有一个不清楚的地方。这道题,var首先是全局变量‘Hi’,当调用函数fun1()的时候,fun1中申明了var同名的全局变量,并且赋值为‘Baby’,函数fun1返回fun2(var);可以看到var = ‘Baby’传入到函数fun2中,var变成了 ‘Baby I love you’,又将此时的var作为实参传入到fun3()中,此时var在函数3中变成了‘小甲鱼’,函数fun3()没有None,此次操作之后fun2继续下一步,返回var即返回‘Baby I love you’给函数fun1(),此时print函数输出‘Baby I love you’,不是我认为的‘小甲鱼’。试着改了很多,但是还是对函数的作用域有点迷茫,希望鱼油们不要吝惜自己的十姑娘,借我你的讲解。


如果给函数fun3()加一个返回
>>> def fun3(var):
    var = ' 小甲鱼 '
    return var
print函数执行的结果还是之前的结果。并不是我认为的小甲鱼
RTX截图未命名.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-27 19:30:40 | 显示全部楼层
这网站有bug吗?刷新一次,我的头像就变成女的,再刷新又变成男的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-27 22:10:24 | 显示全部楼层
兄弟,你和我进度一样欸。是这样的你在fun2那里返回的是var,虽然fun2那里有一句fun3(var),但并不是返回fun3,所以它输出的是fun2的baby i love you,而不是fun3的none。你试试这样
  1. def fun1() :
  2.         global var
  3.         var = 'Baby'
  4.         return fun2(var)

  5. def fun2(var) :
  6.         var +='I love you'
  7.         return fun3(var)
  8. def fun3(var) :
  9.         var = '小甲鱼'
复制代码

这样输出的就是fun3的none
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-27 22:15:38 | 显示全部楼层
补充上一楼,刚刚你说不是输出你想象中的小甲鱼。我刚才那样改输出的也不是小甲鱼,因为在fun2那里虽然我有返回fun3,但我在fun3那里并没有返回任何东西,所以我刚刚那样打印是none。你要打印小甲鱼是这样
  1. def fun1() :
  2.         global var
  3.         var = 'Baby'
  4.         return fun2(var)

  5. def fun2(var) :
  6.         var +='I love you'
  7.         return fun3(var)
  8. def fun3(var) :
  9.         var = '小甲鱼'
  10.         return var
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-27 22:47:40 | 显示全部楼层
  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.     return fun3(var)
  9.    

  10. def fun3(var):
  11.     var = ' 小甲鱼 '
  12.     return var
  13. print(fun1())

  14. 返回小甲鱼。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-28 10:59:41 | 显示全部楼层
才学到第17课时呢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-29 14:38:27 | 显示全部楼层
rickie7 发表于 2016-8-27 22:15
补充上一楼,刚刚你说不是输出你想象中的小甲鱼。我刚才那样改输出的也不是小甲鱼,因为在fun2那里虽然我有 ...

可以的,挺详细的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-29 14:39:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-29 14:39:52 | 显示全部楼层
Nico35 发表于 2016-8-28 10:59
才学到第17课时呢~

加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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