Xfxyxbb 发表于 2020-3-3 15:02:30

python 一道题不理解

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 啊

qiuyouzhi 发表于 2020-3-3 15:06:41

又是一道问过10000次的问题
因为global了var,且return 了fun2(return fun2就能让fun2也享有global var的特权)
只有fun3没有,他只是被单纯的调用了

qiuyouzhi 发表于 2020-3-3 15:18:43

https://fishc.com.cn/forum.php?mod=viewthread&tid=157114&page=1#pid4379822

Hoiste 发表于 2020-3-3 15:30:56

按照思路来:
print(fun1())调用了fun1()
fun1中,由于global var,var = 'Baby',相当于外面的这个var = ‘Hi’也被改为了函数中的var。
fun1的返回值为:return fun2(var),即将var作为参数传给函数fun2,并将返回fun2的结果给fun1,所以要调用fun2
fun2的var参数为‘Baby’,然后因为 var += 'I love you'。因为没有设置global,fun2的var = ‘Baby I love you’只适用于fun2中,所以fun2下面的return var的结果就是‘Baby I love you’(意思是fun2(var)的调用结果就是这句话)
然后print(fun1())就是打印fun1的返回值,即fun2(var)
这里要注意的是,此时哪怕在函数体外,var的值已经变成了‘Baby’了
页: [1]
查看完整版本: python 一道题不理解