零基础入门学习python:课后作业019_测试题4
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改成了'小甲鱼'了么...
请帮帮我,谢谢!
本帖最后由 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' 在 fun3 中 var = ' 小甲鱼 ' 只是对局部变量 var 进行了修改,并不影响全局变量 var。 jackz007 发表于 2019-11-15 11:12
我不明白既然var可以从fun1()传到fun2(),为什么不能从fun2()传到fun3()呢? zltzlt 发表于 2019-11-15 19:24
在 fun3 中 var = ' 小甲鱼 ' 只是对局部变量 var 进行了修改,并不影响全局变量 var。
fun2中不也是局部变量么 Archie27 发表于 2019-11-15 20:36
我不明白既然var可以从fun1()传到fun2(),为什么不能从fun2()传到fun3()呢?
传进去没问题,而且,事实上也传进去了,但是,重点是,在 fun3() 内对 var 的修改与外层函数 fun2() 中的同名变量 var 无关,就是说,这些修改不会改变 fun2() 中 var 的内容。 jackz007 发表于 2019-11-15 20:50
传进去没问题,而且,事实上也传进去了,但是,重点是,在 fun3() 内对 var 的修改与外层函数 fu ...
那fun2()中对var的修改为什么可以实现呢?这和fun3()中对var的修改的区别在哪呢? 本帖最后由 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 的内容就这么冲出了重重包围 ,跑到了函数外面,最后被显示到了屏幕上。
, 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 '吧?
我是哪里理解得不对呢?{:5_99:} 本帖最后由 jackz007 于 2019-11-16 11:59 编辑
Archie27 发表于 2019-11-16 11:43
那既然fun2()返回的结果是var且不能对fun1()中的var做出修改,那这个var的内容是什么呢?是' I love you...
都解释到了这个程度还在问,我也是醉了!
这样吧,你把这个记住就好了,在函数内对任何变量的修改(包括函数的输入参数)其影响范围仅限于本函数内部,除非这个变量是全局变量。 jackz007 发表于 2019-11-16 11:54
都解释到了这个程度还在问,我也是醉了!
这样吧,你把这个记住就好了,在函数内对任何 ...
好的,非常感谢!
页:
[1]