小甲鱼书里的内嵌函数问题
x = 520def fun1():
x = 88
def fun2():
x = 11
print(x)
fun2() 这里为什么要打fun2()
fun1()
这里为什么程序会打印88?但是如果没有x=520的全局变量程序就会打印fun1()为88
感谢! 缩进乱七八糟,看不懂 我是按照小甲鱼书上写的抄下来的 不太看得懂 永恒的蓝色梦想 发表于 2020-6-19 16:35
缩进乱七八糟,看不懂
我是按照小甲鱼书上抄下来的,我看不懂 galaxyhhn 发表于 2020-6-19 16:45
我是按照小甲鱼书上写的抄下来的 不太看得懂
那代码可能是这样:
x = 520
def fun1():
x = 88
def fun2():
x = 11
print(x)
fun2() #这里为什么要打fun2()
fun1()
这个代码打印的结果是88
x = 520
def fun1():
x = 88
def fun2():
x = 11
print(x)
fun2() #这里为什么要打fun2()
fun1()
这个程序打印的是 11
x = 520
def fun1():
x = 88
def fun2():
x = 11
fun2() #这里为什么要打fun2()
print(x)
fun1()
这个代码打印的是 520
你理解下 Python 的屏蔽机制就能理解这里为什么打印的结果不一
假设 有一个全局变量名为var
当你在函数内创建一个局部变量,这个局部变量和全局变量同名时,即也为 var 时,就会触发Python 的屏蔽机制
在函数内部暂时屏蔽 全局变量 var 而重新创建一个局部变量 var 来暂时覆盖全局变量的 var,使得在函数内部时候
var 是指你后来创建的 局部变量 而不是 全局变量,当你运行一出了这个函数内的局部空间,也就是出了函数
这个局部变量 var 就不复存在,变会全局变量的var
所以就会出现那样打印的结果,这里我用了颜色来标注了下红色是全局变量,蓝色是局部变量
页:
[1]