谁能帮忙解释下这段为啥没错啊 内嵌函数不是修改了全局变量了吗
def outside():var = 5
def inside():
var = 3
print(var)
inside()
outside()
你要了解 Python 的屏蔽机制(Ps:都是指没有 global 和 nonlocal声明下,因为如果声明了就不是局部变量了):
当函数内部的变量和函数外部全局作用域的变量名相同时,会触发 Python 的屏蔽机制,函数内部会创建一个同名的局部变量
来暂时覆盖同名的全局变量,此时在函数内部的值都为这个局部变量,只要一出此函数,那么该局部变量就不复存在,变会原来的全局变量
所以并不是修改了全局变量,而是暂时屏蔽 覆盖了全局变量,一旦你出了 inside 函数 var 就变回了 5
这里的 var = 5 相对于 函数 inside 是全局变量噢~ 而 var 3 是局部变量,你可以在调用 inside 函数下面多打印一次 var 就能看出来 全局变量并没有发生改变
def outside():
var = 5
def inside():
var = 3
print(var)
inside() # 先进入 inside 函数 打印了 var
print(var)# 出了函数再次打印 var
outside()
结果为:
3# 这个是 inside 函数里的print 打印的
5# 这个是 outside 函数的print 打印的
本帖最后由 heidern0612 于 2020-6-26 16:22 编辑
你这哪有全局变量?不全是内部变量么?
另外建议楼主贴代码段,你这太不清晰了。
inside调用打印,outside没啥返回值,所以结果就一个3了。
页:
[1]