ldddingding 发表于 2021-1-12 17:05:24

python 第19讲

把代码改成如下为什么还是一样的结果,删去了global,最后一段加了return var
var = ' Hi '
def fun1():
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return var
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())

原代码:
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())

°蓝鲤歌蓝 发表于 2021-1-12 17:42:59

你删的与补的对 fun1() 根本就没有什么影响,那结果肯定还是一样啊。
控制变量法,也要 控制 与 结果 相关的变量 才行啊。

jackz007 发表于 2021-1-12 18:11:59

本帖最后由 jackz007 于 2021-1-12 18:14 编辑

      fun3() 的返回值毫无意义,因为,它无法影响 fun2() 的返回结果,只有让 fun3() 的返回结果影响了 fun2() 的返回结果(变量 var),fun3() 的 return var 才会具有意义,同时,print(fun1()) 也才会真正见到效果。

小无趣 发表于 2021-1-12 18:56:58

global函数是将变量设置为全局变量,使其能在函数里面访问并使用;
但是在这段代码里(就是你所指的原代码)
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变量设置为全局变量后,fun1()函数里面又将var重新赋值了,赋值内容为' Baby '
然后接着往下走,return fun2(var),这里将var的值,也就是'Baby'传到了fun2()函数里面
然后执行var += 'I love you',到这里的时候var的值为' Baby I love you',然后fun3(var),
又将'Baby I love you'传到了fun3()函数里面,但是因为fun3()函数没有进行return,所以
可以不用理他,所以最后返回的值为' Baby I love you'
但是你修改的代码,在fun3()函数里面加上了return var,这里因为是作用域的原因,你
在fun3()函数里面加一句print(var),你可以发现他输出的结果是'小甲鱼'的

小无趣 发表于 2021-1-12 19:02:26

我后面又想了下,好像是因为在fun2()函数那里已经return var了,所以结果是' Baby I love you',如果你将
fun2()函数中的return var修改为return fun3(var),那么返回的结果就是'小甲鱼'了,4楼那最后两段好像有点问题 ,看看就好,不建议参考

小无趣 发表于 2021-1-12 19:10:56

var = ' Hi '
def fun1():
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    a = fun3(var)
    print(a)
    return var
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())
我这边稍微改了下代码,将fun2()函数中的fun3(var)返回的值,赋值给了a,然后将他打印出来,
其实fun3(var)的值,是返回到了变量a中,他并没有将值返回到fun1()函数。
不好意思一下占了几楼,因为想法都是断断续续来的,所以回帖也断断续续{:10_266:}{:10_266:}
页: [1]
查看完整版本: python 第19讲