小问题求助
请问这个输出结果为什么是先打印5,再打印3def outside():
var = 5
print(var)
def inside():
var = 3
print(var)
inside()
outside()
我自己想明白了,暴露智商了,怎么删帖{:5_109:}
先说个 Python 的屏蔽机制吧(Ps:都是指没有 global 和 nonlocal声明下,因为如果声明了就不是局部变量了):
当函数内部的变量和函数外部全局作用域的变量名相同时,会触发 Python 的屏蔽机制,函数内部会创建一个同名的局部变量
来暂时覆盖同名的全局变量,此时在函数内部的值都为这个局部变量,只要一出此函数,那么该局部变量就不复存在,变会原来的全局变量
然后我们来看看代码:
def outside():
var = 5
print(var)
def inside():
var = 3
print(var)
inside()
outside()
函数先调用 outside() ,然后我们进入函数,var = 5 进行赋值,然后打印 var 的值 为 5
在函数内部在定义了一个内嵌函数 inside() ,定义完成后才进行调用,而 var=5 相对于内嵌函数 inside() 为全局变量
当你 inside() 函数内重新设置一个变量与全局变量 var 同名,导致触发Python 的屏蔽机制,将全局变量的 var 暂时屏蔽,在 inside函数内创建个局部变量 var = 3 来暂时覆盖了全局变量的 var = 5
所以在函数内 打印了一次 var = 3 ,但是一出函数局部变量 var = 3 就不复存在,又变回了 var = 5 ,而且代码按顺序来运行,打印的结果就为
5
3
这里你如果在函数 insude 调用后再次打印 你就会发现 var 还是 等于 5 而没有被 3 所重新赋值
yz7268913 发表于 2020-7-1 22:50
我自己想明白了,暴露智商了,怎么删帖
我才发现....
我刚才还在疯狂码字,你和我说你理解了???{:10_245:} 噗...... Twilight6 发表于 2020-7-1 22:58
我才发现....
我刚才还在疯狂码字,你和我说你理解了??? 噗......
大佬速度太快了,失敬失敬{:10_254:} yz7268913 发表于 2020-7-1 23:00
大佬速度太快了,失敬失敬
{:10_281:} Twilight6 发表于 2020-7-1 23:01
认真的问一句,在哪里能删帖 yz7268913 发表于 2020-7-1 23:04
认真的问一句,在哪里能删帖
删帖只有在没有人评论时候可删,否则只能寻求管理帮助~~
页:
[1]