dasny 发表于 2020-4-11 15:21:40

全局变量问题

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?

因为fun1里面第一行global了var,fun2里面第一行把var 变成了 Baby I love you这个能理解
但是第三行调用了fun3(var),不是应该又把var改成小甲鱼了吗?那么最后一行return回来应该是小甲鱼啊,那么fun1最后return不也应该是小甲鱼吗?

谢谢!

aleiluyes 发表于 2020-4-11 15:42:55

你的def fun3(var): 并没有 return
然后因为没有声明 global 全局 , 所以 var = ' 小甲鱼 ' 的赋值只是在 def fun3(var): 内操作,
所以不会影响到其他地方

leon_xinxin 发表于 2020-4-11 15:45:39

你好,在fun3(var)里面的var是局部变量,出了fun3就没有了,fun1是把var转成了baby,fun2在此基础上加上了i love you ,在fun2里面调用的fun3只是在它自己的函数里面创造了一个局部变量不改变函数之外的全局变量,但是总体的输出还是在fun2,因此是输出fun2的var局部变量:baby i love you

dasny 发表于 2020-4-11 15:55:44

aleiluyes 发表于 2020-4-11 15:42
你的def fun3(var): 并没有 return
然后因为没有声明 global 全局 , 所以 var = ' 小甲鱼 ' 的赋值只是在...

fun3里面加了return var的话,发现也没用

dasny 发表于 2020-4-11 16:04:26

var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    print(var)
    return fun2(var)

def fun2(var):
    var += 'I love you'
    print(var)
    fun3(var)
    print(var)
    print(fun3(var))
    return var

def fun3(var):
    var = ' 小甲鱼 '
    return var


print(fun1(),'\n')
print(fun2(var),'\n')
print(fun3(var))

在不同位置插入打印,基本上搞明白了,谢谢各位!

程序结果:

Baby
Baby I love you
Baby I love you
小甲鱼
Baby I love you

Baby I love you
Baby I love you
小甲鱼
Baby I love you

小甲鱼
页: [1]
查看完整版本: 全局变量问题