内嵌函数
这个B会报错 不理解 我的理解是 程序不是一步一步执行吗 虽然定义局部变量会把全局变量给屏蔽但是print是在var=3上面我觉得当执行到print的时候var还没有被屏蔽 我觉得应该能输出出来不知道我哪里理解有问题 ======python的变量、函数、对象,如果不是python自有的,第一次出现必须是赋值语句代码运行过程如下:
def outside(): #2、定义函数
var = 5 #3、函数outsidi()内变量赋值
def inside(): #5、定义函数内的函数
print(var) #6、打印inside()函数内的局部变量,前面并没有赋值语句,因此会报错
var = 3 #7、重新赋值
inside() #4、看缩进,这里才是第4步,然后向上找同等缩进的函数定义
outside()#1、注意看缩进,其他都是定义函数语句,因此这里是第一步,下一步则向上(注意理解上面的话,所以python出现了自定义的变量、函数、对象,都是向上寻找赋值语句)寻找函数定义过程 如果还不理解,我这么再给你分析下代码:
1、outside()
2、var = 5-----outside函数内局部变量
3、inside()
4、print(var)---这个var是指的inside()函数内的局部变量,第一次出现这个变量,并不是赋值语句,因此会报错的
5、var =3-----inside函数内局部变量
4和5对调下,就不会报错了
屏蔽机制是相对于一个作用域空间而言的,即:当你这个命名空间里的 var 被重新赋值时候,就会导致这个作用空间触发屏蔽机制
所以因为你内嵌函数内对 var 重新赋值了,导致在这个空间内,已经屏蔽了外部的 var 变量,导致触发 var 没有定义而报错
笨鸟学飞 发表于 2020-11-7 21:56
======python的变量、函数、对象,如果不是python自有的,第一次出现必须是赋值语句
代码运行过程如下:
...
但是把内置函数的变量名字改一下就可以了啊
页:
[1]