鱼C论坛

 找回密码
 立即注册
查看: 1992|回复: 14

[已解决]第19课,关于一道题的代码执行流程。领鱼币哦~

[复制链接]
发表于 2017-10-16 15:56:32 | 显示全部楼层 |阅读模式

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

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

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())


最后不是应该打印小甲鱼么,,,不是太懂了。
def fun2(var):
    var += 'I love you'
    fun3(var)   #代码执行到这里的时候,var = Baby I love you,这时候调用了fun3函数,此时, Baby I love you = ‘小甲鱼’,所以最后答案不应该是“小甲鱼么???”
    return var   
最佳答案
2017-10-16 20:29:40
大佬,我来帮你捋一下
1.  先设置var='Hi'
2.  print(fun1())
  2.1  声明全局变量var,并设置为Baby,此时Hi被覆盖,即便在函数外边输出var,此时也变成了Baby
  2.2  fun1()返回fun2(var),相当于print(fun2(var))
  2.3  fun2(var),var+'I Love You',此时fun2内的var=‘Baby i love you’
  2.4  然后fun3(var),var='小甲鱼',此时fun2内的var仍然是Baby i love you,fun3内的var是小甲鱼
3.  最后输出fun2函数内的var

这个题目主要考察作用域,全局变量影响整个全局,函数内的变量是私有变量,只是在函数内部生效



如果满意的话,大佬给俺点一个最佳,您的鼓励将是对我最大的鼓励!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-16 15:59:10 | 显示全部楼层
忘添加鱼币了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-16 16:04:07 | 显示全部楼层
fun3(var):
var='小甲鱼'
fun3()是没有返回值的哦,fun3()在fun2()只是误导你的,在fun2()里又没有var=fun3(var)

你从fun1()慢慢一步步下来,理顺一下就懂了

函数如果没有返回值,默认返回none,有返回值的话只返回里面的值,变量名也是不返回的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-16 16:14:27 | 显示全部楼层
ButcherRabbit 发表于 2017-10-16 16:04
fun3(var):
var='小甲鱼'
fun3()是没有返回值的哦,fun3()在fun2()只是误导你的,在fun2()里又没有var=f ...

可以再详细一点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-16 17:03:47 | 显示全部楼层
我来个详细的
你先看fun3()的注释再看fun2()的注释

  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) #由于没有返回var,所以此时的var = 'Hi i love you'
  9.     return var

  10. def fun3(var):
  11.     var = ' 小甲鱼 ' #这一步你没有返回var,应该是return var

  12. print(fun1())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-16 18:10:21 | 显示全部楼层
宫保鸡丁丁 发表于 2017-10-16 17:03
我来个详细的
你先看fun3()的注释再看fun2()的注释

整个程序执行流程能帮忙捋一下吗?谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-16 20:29:40 | 显示全部楼层    本楼为最佳答案   
大佬,我来帮你捋一下
1.  先设置var='Hi'
2.  print(fun1())
  2.1  声明全局变量var,并设置为Baby,此时Hi被覆盖,即便在函数外边输出var,此时也变成了Baby
  2.2  fun1()返回fun2(var),相当于print(fun2(var))
  2.3  fun2(var),var+'I Love You',此时fun2内的var=‘Baby i love you’
  2.4  然后fun3(var),var='小甲鱼',此时fun2内的var仍然是Baby i love you,fun3内的var是小甲鱼
3.  最后输出fun2函数内的var

这个题目主要考察作用域,全局变量影响整个全局,函数内的变量是私有变量,只是在函数内部生效



如果满意的话,大佬给俺点一个最佳,您的鼓励将是对我最大的鼓励!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-16 20:35:09 | 显示全部楼层
我是来看回帖的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-17 09:14:21 | 显示全部楼层
很不错,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-17 09:40:32 | 显示全部楼层
本帖最后由 宫保鸡丁丁 于 2017-10-17 09:42 编辑
唱离歌的老鼠 发表于 2017-10-16 18:10
整个程序执行流程能帮忙捋一下吗?谢了


  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) #由于没有返回var,所以此时的var = 'Hi i love you'
  9.     return var

  10. def fun3(var):
  11.     var = ' 小甲鱼 ' #这一步你没有返回var,应该是return var

  12. print(fun1())
复制代码


咱从fun3()开始
fun3()没有返回:return var,且什么都没有返回,python中自己定义返回None,表示空对象.说明在fun2()里边的var没有因为执行fun3()而改变.
fun2()里边var = 'Hi Baby I love you',且赋值给fun3()后返回: return var,说明因为执行fun2()后,fun1()
的var的值变成了 'Hi Baby I love you'

最后fun1()里边可知道var =  'Hi Baby I love you',最终打印出来的是 'Hi Baby I love you'




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

使用道具 举报

 楼主| 发表于 2017-10-17 11:19:39 | 显示全部楼层
宫保鸡丁丁 发表于 2017-10-17 09:40
咱从fun3()开始
fun3()没有返回:return var,且什么都没有返回,python中自己定义返回None,表示空对 ...

你这个最后输出的答案都不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-17 11:24:28 | 显示全部楼层
Teagle 发表于 2017-10-16 20:29
大佬,我来帮你捋一下
1.  先设置var='Hi'
2.  print(fun1())
  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) #由于没有返回var,所以此时的var = 'Hi i love you'
  9.     return var

  10. def fun3(var):
  11.     var = ' 小甲鱼 ' #这一步你没有返回var,应该是return var
  12.     return var

  13. print(fun1())
复制代码


这样写答案为:Baby i love you   fun3 就算加了return答案还是没有变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-17 22:46:09 | 显示全部楼层
唱离歌的老鼠 发表于 2017-10-17 11:24
这样写答案为:Baby i love you   fun3 就算加了return答案还是没有变化
  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.     #print(fun3(var),var) #由于没有返回var,所以此时的var = 'Hi i love you'
  9.     return fun3(var)

  10. def fun3(var):
  11.     var = ' 小甲鱼 ' #这一步你没有返回var,应该是return var
  12.     return var

  13. print(fun1())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 09:02:37 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 17:31:03 | 显示全部楼层
var = ' Hi '

def fun1():
    global var #这个是全局变量,应该会把hi带入var中,这个时候var=hi
    var = ' Baby ' #重新对这个变量赋值了所以这个之后var = bady
    return fun2(var) #因为这个里重新返回了函数fun2(var),并吧var变量作为参数传入

def fun2(var):#var是之前传入的参数,实际就是bady
    var += 'I love you'#这个时候var=bady i love you
    fun3(var)#这个时候调用fun3并把var作为传输传入但是实际并没有意义,因为不管这个函数执行什么结果在fun2()这个函数中var这个变量都不会变。
    return var#返回当前的var参数也就是body i love you

def fun3(var):#这个函数没有返回值,可以忽略不计。而且就算有返回值,也不会对之前的fun2函数有任何影响
    var = ' 小甲鱼 '
print(fun1())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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