galaxyhhn 发表于 2020-6-19 16:33:24

小甲鱼书里的内嵌函数问题

x = 520
def fun1():
x = 88
def fun2():
      x = 11
      print(x)
fun2()         这里为什么要打fun2()

fun1()
这里为什么程序会打印88?但是如果没有x=520的全局变量程序就会打印fun1()为88
感谢!

永恒的蓝色梦想 发表于 2020-6-19 16:35:39

缩进乱七八糟,看不懂

galaxyhhn 发表于 2020-6-19 16:45:02

我是按照小甲鱼书上写的抄下来的 不太看得懂

galaxyhhn 发表于 2020-6-19 16:45:49

永恒的蓝色梦想 发表于 2020-6-19 16:35
缩进乱七八糟,看不懂

我是按照小甲鱼书上抄下来的,我看不懂

Twilight6 发表于 2020-6-19 16:47:19

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

Twilight6 发表于 2020-6-19 16:54:59

你理解下 Python 的屏蔽机制就能理解这里为什么打印的结果不一

假设 有一个全局变量名为var

当你在函数内创建一个局部变量,这个局部变量和全局变量同名时,即也为 var 时,就会触发Python 的屏蔽机制

在函数内部暂时屏蔽 全局变量 var 而重新创建一个局部变量 var 来暂时覆盖全局变量的 var,使得在函数内部时候

var 是指你后来创建的 局部变量 而不是 全局变量,当你运行一出了这个函数内的局部空间,也就是出了函数

这个局部变量 var 就不复存在,变会全局变量的var

所以就会出现那样打印的结果,这里我用了颜色来标注了下红色是全局变量,蓝色是局部变量
页: [1]
查看完整版本: 小甲鱼书里的内嵌函数问题