津津乐道 发表于 2020-9-4 16:11:16

关于全局变量的课后作业

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变成了 baby i love you 但是 下一个fun3 不是把var变成小甲鱼了吗

LuLD 发表于 2020-9-4 16:16:40

def fun1():
    global var
    var = ' Baby '
    return fun2(var)// 有返回值

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var      //有返回值

def fun3(var):
    var = ' 小甲鱼 '
                     //无返回值
fun3(var)没有返回值

所以 fun2 就算调用 fun3,var 的值也不会改变,因为 fun3()没有返回值

疾风怪盗 发表于 2020-9-4 16:19:32


var = ' Hi '

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

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

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

print(fun1())


fun3没有写返回值,也没把fun3里的var作为全局变量,所以仅仅是局部变量,调用没调用一样
在pycharm里可以看到fun3里的var是灰色的,没被用到

求资专用 发表于 2020-9-4 16:27:18

fun3中的var没有声明gobal之类,是局部变量,它的作用域只在fun3内,出了fun3这个变量相当于是不存在的。所以你说的在fun3中把var变成小甲鱼了确实是改变了,但是只是改变了fun3中的var,又没有把这个var作为返回值输出,所以这个var你可以当作不存在。

津津乐道 发表于 2020-9-4 16:45:28

LuLD 发表于 2020-9-4 16:16
def fun1():
    global var
    var = ' Baby '


进入 fun3 var不是被进行了赋值操作吗。。。赋值之后不会变化的吗

津津乐道 发表于 2020-9-4 16:49:12

求资专用 发表于 2020-9-4 16:27
fun3中的var没有声明gobal之类,是局部变量,它的作用域只在fun3内,出了fun3这个变量相当于是不存在的。所 ...

看你说的看懂了 谢谢老哥

LuLD 发表于 2020-9-4 16:54:19

津津乐道 发表于 2020-9-4 16:45
进入 fun3 var不是被进行了赋值操作吗。。。赋值之后不会变化的吗

你可以理解为   有三间房子fun1fun2fun3
你拿了一个 'Hi'给了 房子 fun1,
然后 它把你这个 'Hi‘ 换成了’Baby' 又把这个'Baby'给了 房子fun2,   这个时候 在fun1 里 var还是 'Baby’
fun2 在 把这个'Baby‘ 加长了变成了 'Baby I love you’ ,又把这个给了 房子fun3,这个时候 fun2里 var 还是 'Baby I love you’,
fun3 把这个'Baby I love you‘ 又换成 '小甲鱼',但是呢,fun3 不把这个返还给 fun2了, fun2 这个急得呀,上边老大要自己交货,怎么办呢,就把'Baby I love you’ 给交上去了,
那么 这个时候 fun1 里的 var 就变成了 'Baby I love you’ ,所以最后显示的也就是 'Baby I love you’,而不会是小甲鱼了
页: [1]
查看完整版本: 关于全局变量的课后作业