Python小记之作用域

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/insthink/article/details/52516422

一直傻傻分不清的作用域,终于在关键时候坑了我一把,还是写写以后免得再犯。


一、作用域解析优先级

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,因为它引入多余的变量到全局域










猜你喜欢

转载自blog.csdn.net/insthink/article/details/52516422
今日推荐