一直傻傻分不清的作用域,终于在关键时候坑了我一把,还是写写以后免得再犯。
一、作用域解析优先级
local > enclosing > global > built-in
搞清楚这个顺序,很多时候不会犯错
二、例子
ins = 0
def fun():
print ins
ins = 1
fun()
执行结果会出现“UnboundLocalError: local variable 'ins' referenced before assignment”的错误,这是什么原因呢?
因为在fun()函数内部,我们给ins赋值为1,那么Python解释器就认为,这个ins是fun()内部的局部变量,那么我们先print这个局部变量,当然是没有结果的啦。(如果没有ins = 1这句话,那么执行fun()之后,会输出ins = 0)
解决方法:可以在fun()内部的ins前面加上global的关键字,告诉解释器,我的这个ins变量不是局部变量,而是一个全局变量。
*在实际使用中,尽量用return来做返回,少用global,因为它引入多余的变量到全局域