鱼C论坛

 找回密码
 立即注册
查看: 2536|回复: 10

[已解决]零基础入门学习python:课后作业019_测试题4

[复制链接]
发表于 2019-11-15 10:47:31 | 显示全部楼层 |阅读模式

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

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

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())
为什么打印出来的不是'小甲鱼'啊?在fun2(var)里最后不是把var改成了'小甲鱼'了么...
请帮帮我,谢谢!
最佳答案
2019-11-15 11:12:43
本帖最后由 jackz007 于 2019-11-15 11:17 编辑
var = ' Hi '               # 全局变量 var 赋初值 ' Hi '

def fun1():
    global var             # 声明全局变量 var,从此,在 fun1() 函数内部,全局变量 var 可访问,可赋值(如果没有此句,那就只能访问,不能赋值) 
    var = ' Baby '         # 用新内容 ' Baby ' 覆盖 var 的原有内容 ' Hi '
    return fun2(var)       # 用对函数 fun2(var) 的调用结果作为本函数的调用结果返回

def fun2(var):             # var 是 fun2() 的形式参数,所以,在 fun2() 内部,var 只是一个局部变量,与外部的同名全局变量无关
    var += 'I love you'    # 从 fun1() 传入的 var = ' Baby ',所以,此刻,var = ' Baby I love you'
    fun3(var)              # 以 var 为参数调用 fun3()
    return var             # 返回局部变量 var 的值 ' Baby I love you',同时,也是对函数 fun1() 调用的返回结果

def fun3(var):             # var 是 fun3() 的形式参数,属于局部变量
    var = ' 小甲鱼 '       # 函数内部对局部变量的修改不会影响到函数以外,也就是说,不会传递到外层函数 fun2() 中,所以,这个修改可以忽略

print(fun1())              # 打印结果:' Baby I love you'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-15 11:12:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-15 11:17 编辑
var = ' Hi '               # 全局变量 var 赋初值 ' Hi '

def fun1():
    global var             # 声明全局变量 var,从此,在 fun1() 函数内部,全局变量 var 可访问,可赋值(如果没有此句,那就只能访问,不能赋值) 
    var = ' Baby '         # 用新内容 ' Baby ' 覆盖 var 的原有内容 ' Hi '
    return fun2(var)       # 用对函数 fun2(var) 的调用结果作为本函数的调用结果返回

def fun2(var):             # var 是 fun2() 的形式参数,所以,在 fun2() 内部,var 只是一个局部变量,与外部的同名全局变量无关
    var += 'I love you'    # 从 fun1() 传入的 var = ' Baby ',所以,此刻,var = ' Baby I love you'
    fun3(var)              # 以 var 为参数调用 fun3()
    return var             # 返回局部变量 var 的值 ' Baby I love you',同时,也是对函数 fun1() 调用的返回结果

def fun3(var):             # var 是 fun3() 的形式参数,属于局部变量
    var = ' 小甲鱼 '       # 函数内部对局部变量的修改不会影响到函数以外,也就是说,不会传递到外层函数 fun2() 中,所以,这个修改可以忽略

print(fun1())              # 打印结果:' Baby I love you'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-15 19:24:55 | 显示全部楼层
在 fun3 中 var = ' 小甲鱼 ' 只是对局部变量 var 进行了修改,并不影响全局变量 var。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-15 20:36:48 | 显示全部楼层

我不明白既然var可以从fun1()传到fun2(),为什么不能从fun2()传到fun3()呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-15 20:37:29 | 显示全部楼层
zltzlt 发表于 2019-11-15 19:24
在 fun3 中 var = ' 小甲鱼 ' 只是对局部变量 var 进行了修改,并不影响全局变量 var。

fun2中不也是局部变量么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-15 20:50:48 | 显示全部楼层
Archie27 发表于 2019-11-15 20:36
我不明白既然var可以从fun1()传到fun2(),为什么不能从fun2()传到fun3()呢?


      传进去没问题,而且,事实上也传进去了,但是,重点是,在 fun3() 内对 var 的修改与外层函数 fun2() 中的同名变量 var 无关,就是说,这些修改不会改变 fun2() 中 var 的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 10:42:20 | 显示全部楼层
jackz007 发表于 2019-11-15 20:50
传进去没问题,而且,事实上也传进去了,但是,重点是,在 fun3() 内对 var 的修改与外层函数 fu ...

那fun2()中对var的修改为什么可以实现呢?这和fun3()中对var的修改的区别在哪呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 10:51:26 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-16 10:53 编辑
Archie27 发表于 2019-11-16 10:42
那fun2()中对var的修改为什么可以实现呢?这和fun3()中对var的修改的区别在哪呢?


     没错,在 fun2() 中对 var 的修改同样不会传递回外层调用函数 fun1(),可是,fun2() 中的 return var 语句把 var 作为结果返回到 fun1(),而 fun1() 中,return fun2(var) 又把 fun2() 返回的结果作为自己的结果返回,所以,fun2() 中的局部变量 var 的内容就这么冲出了重重包围 ,跑到了函数外面,最后被显示到了屏幕上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 11:43:03 | 显示全部楼层
jackz007 发表于 2019-11-16 10:51
没错,在 fun2() 中对 var 的修改同样不会传递回外层调用函数 fun1(),可是,fun2() 中的 return  ...

那既然fun2()返回的结果是var且不能对fun1()中的var做出修改,那这个var的内容是什么呢?是' I love you '吗?如果是的话,那再回到fun1()中,return出来的结果不是应是' I love you '吗?打印结果应该没有' baby '吧?
我是哪里理解得不对呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 11:54:54 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-16 11:59 编辑
Archie27 发表于 2019-11-16 11:43
那既然fun2()返回的结果是var且不能对fun1()中的var做出修改,那这个var的内容是什么呢?是' I love you  ...


      都解释到了这个程度还在问,我也是醉了!

      这样吧,你把这个记住就好了,在函数内对任何变量的修改(包括函数的输入参数)其影响范围仅限于本函数内部,除非这个变量是全局变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 12:29:31 | 显示全部楼层
jackz007 发表于 2019-11-16 11:54
都解释到了这个程度还在问,我也是醉了!

      这样吧,你把这个记住就好了,在函数内对任何 ...

好的,非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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