|
|
发表于 2019-5-30 10:25:36
|
显示全部楼层
本帖最后由 都淡忘 于 2019-5-30 10:34 编辑
理解python对于变量的寻找原理,当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError),于是有
第一,在内部函数中不修改全局变量,但是可以访问全局变量
例:结果是5
def outside():
var = 5
def inside():
print(var)
inside()
outside()
第二,在内部函数中修改同名全局变量,则python会认为它是一个局部变量,也就是把外部的”屏蔽“了起来
例:结果是3
def outside():
var = 5
def inside ():
var = 3
print(var)
inside()
outside()
第三,在内部函数修改同名全局变量之前调用变量名称,这是不允许的。理解寻找变量的过程。
例:报错
def outside():
var = 5
def inside ():
print(var)
var = 3
inside()
outside()
在内部函数中,一行一行读,print(var),这里于是找var变量,内部并没有找到哦,于是外部,外部找到了,于是这个var变量是引用外部的var变量,下一段代码就错误了,尝试修改var变量,于是又认为var是局部变量,在内部妄图修改外部变量的值?拿前朝的剑斩本朝的官,于是就错误了 |
|