鱼C论坛

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

[已解决]019的课后习题

[复制链接]
发表于 2020-2-19 13:23:58 | 显示全部楼层 |阅读模式

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

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

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

为什么打印出来的是 Baby I love you
最佳答案
2020-2-19 13:43:24
本帖最后由 jackz007 于 2020-2-19 13:48 编辑

        fun1()、fun2()、fun3()  都对 var 进行了改变,但是,只有 fun1()、fun2() 中对 var 的改变是有效的,因为 fun1() 中的变量 var 是 fun2() 的输入参数,也就是说,函数 fun2() 中局部变量 var 的初始值是从 fun1() 获得的,fun2() 最后返回的是 var,而 fun1() 最后反馈的又是函数 fun2() 的返回结果;fun3() 就不同了,fun3() 只能单向接收 fun2() 中的局部变量 var,尽管在函数中也对变量 var 进行了修改,但是,修改的只是 fun2() 中变量 var 的一个副本,并不会影响到 var 本身,所以,完全不用理会 fun3() 的存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-19 13:24:56 From FishC Mobile | 显示全部楼层
fun3就是个废柴,你可以当它不存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 13:26:19 | 显示全部楼层
为什么?是因为它没有return吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 13:27:51 From FishC Mobile | 显示全部楼层
minshow 发表于 2020-2-19 13:26
为什么?是因为它没有return吗?

这是一方面,另一个方面就是它里面的var
非彼var
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 13:28:29 | 显示全部楼层
minshow 发表于 2020-2-19 13:26
为什么?是因为它没有return吗?

在这里 fun3() 有没有 return 都不影响结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 13:43:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-19 13:48 编辑

        fun1()、fun2()、fun3()  都对 var 进行了改变,但是,只有 fun1()、fun2() 中对 var 的改变是有效的,因为 fun1() 中的变量 var 是 fun2() 的输入参数,也就是说,函数 fun2() 中局部变量 var 的初始值是从 fun1() 获得的,fun2() 最后返回的是 var,而 fun1() 最后反馈的又是函数 fun2() 的返回结果;fun3() 就不同了,fun3() 只能单向接收 fun2() 中的局部变量 var,尽管在函数中也对变量 var 进行了修改,但是,修改的只是 fun2() 中变量 var 的一个副本,并不会影响到 var 本身,所以,完全不用理会 fun3() 的存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 14:00:02 | 显示全部楼层
我的理解:
print(fun())后的执行路径为:调用fun1,全局变量var重新赋值为Baby,返回fun2,var(Baby)与字符串I love you组合并返回var即“Baby I love you,同时进行fun3()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 14:55:49 | 显示全部楼层
这个问题为变量作用域的问题
var = ' Hi '

def fun1():
    global var  #全局变量,对该变量的赋值将影响var = "Hi"
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you' #fun2()中是对传入的参数进行了连接字符串的操作
    fun3(var) # 此时的var参数为 baby i love you ,将该参数作为实参传入fun3,
    return var

def fun3(var):
    var = ' 小甲鱼 '  #fun3中定义了一局部变量,在fun3内部,局部变量将外部全局变量var覆盖,但该变量仅在fun3中起作用,脱离fun3,var = 小甲鱼   将无法被识别,var的值仍然为全局变量baby

print(fun1())
print(var)   #var依然为baby
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 15:20:36 | 显示全部楼层
你的fun1中var是全局 的,在fun1中更改了var值,同时调用了fun2函数,传入fun2中的var的值是“Baby”,你的fun2 中的字符串是局部的,计算后的值就是Baby I Love you ,并且同时进行了返回,所以最终才会是这个字符串;你在fun2中调用的fun3,传入的值是"Baby  I Love you ",但你fun3中的Var是fun3的局部变量 ,所以你的fun3没什么卵用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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