我写了个很详细的回答,图片蛮多,我用的是Thoony调试给你的结果,你看了就明白了了。如果还不懂再问我吧。
调试程序,运行fun1(); 首先var在外部是全局变量,所以此时var= ‘HI’
先进入的是fun1();进入之后var被声明为全局,因此,此时可以从fun1的内部修改var的值了,
当这一步运行完之后就发现var修改为’Baby’。
运行完上一步后,到这一步就可以发现,右侧可见,var已经修改了
然后再运行return fun2(var),很明显是要搞清楚这个fun2(var)运行后的返回值了,此时return fun2(var)中的带进去的参数为’Baby’
带着这个’Baby’的参数进去到fun2之后,可见右侧的var在全局中还是’Baby’。此时,对fun2中的var进行运算,
很显然,var运算的结果是var变为Baby I love you。于是,带着Baby I love you这参数,我们将其带入到了fun3中。当然必须说明的是,fun2的返回值是返回此时在fun2的局部变量var——也即为BabyI love you。好了,到这里基本就不用再看fun3了,因为在fun3中也没有对var当成全局变量的声明,更没有修改
但是为了看的更清楚,我继续说一下fun3。进去fun3之后,此时带入fun3的参数还是var=BabyI love you。然后运行fun3的第一句,可以发现在fun3中的局部变量也是var,此时var就成了 ' 小甲鱼 '。但是注意这个函数没有返回值哦!!返回值是None。
我们甚至还可以看到在右侧提示全局变量var还是Baby哦!!
于是再回到fun2中的第三句,返回值为None,什么也不做
之后运行return var,当然此时的var已经是Baby I love you。
因此fun1中的returnfun2(var)自然就是返回的就是fun2的返回值——Baby I love you。那么,fun1返回的也是这个字符串Baby I love you。
|