|
发表于 2020-6-15 23:22:01
|
显示全部楼层
本楼为最佳答案
本帖最后由 Twilight6 于 2020-6-15 23:48 编辑
fun2、fun3 都发生了屏蔽机制,我之前叙述有错误,感到很抱歉!!!
当 var 进入 fun2 时候 函数就没有声明了,所以这个时候的 var += 'I love you' 可以看成 var = var + 'I love you'
而 赋值操作是先计算右边 然后赋值左边,所以当赋值时候 就触发了屏蔽机制 此时已经和 之前的 var = ' Baby ' 拼接成功了
所以变成了局部变量 var = 'Baby I love you' 然后传入 fun3(var) fun3相对于 fun2 是是局部,而fun2相对于 fun3 是全局作用域,所以fun3 对 fun2 的 var 产生了屏蔽机制
fun3 里面的赋值就没意义了,因为一出了fun3 就不复存在了,所以 fun2() 函数 的 fun3 对 var 并没有发生改变,最后返回 var = 'Baby I love you'
是没有意义的,小甲鱼老师就是出题考考我们的,看看我们是不是真的理解了这些关系
fun3 的返回值没意义,因为没有一个变量接收或者直接返回 fun3
你可以试试这样的代码:
- var = ' Hi '
- def fun1():
- global var
- var = ' Baby '
- return fun2(var)
- def fun2(var):
- var += 'I love you'
- return fun3(var)
- def fun3(var):
- var += ' 小甲鱼 '
- return var
- print(fun1())
复制代码
会发现结果是:
因为 fun2 也 return 了 fun3 函数,可以等价与在同个作用域了
|
|