没有合适的资源?快使用搜索试试~ 我知道了~
python UnboundLocalError: local variable ‘x’ referenced before a...
39 下载量 96 浏览量
2021-01-20
03:25:49
上传
评论
收藏 54KB PDF 举报
温馨提示
试读
1页
一、疑难杂症 def test_scopt(): print (x) #x是test_scopt()的局部变量,但是在打印时并没有绑定内存对象。 x = 30 #因为这里,所以x就变为了局部变量 test_scopt() x = 40 def test_scopt(): print(x) x = 30 test_scopt() 上面这两种情况都会报错:UnboundLocalError: local variable ‘x’ referenced before assignment 二、探究原因 1、python变量作用域 一般在使用函数def、类cla
资源推荐
资源详情
资源评论
python UnboundLocalError: local variable ‘x’ referenced
before assignment
一、疑难杂症一、疑难杂症
def test_scopt():
print (x) #x是test_scopt()的局部变量,但是在打印时并没有绑定内存对象。
x = 30 #因为这里,所以x就变为了局部变量
test_scopt()
x = 40
def test_scopt():
print(x)
x = 30
test_scopt()
上面这两种情况都会报错报错:UnboundLocalError: local variable ‘x’ referenced before assignment
二、探究原因二、探究原因
1、、python变量作用域变量作用域
一般在使用函数def、类class、lambda、模块model中才会产生作用域的概念。在python其他的代码结构
if,for,while,try等是不会产生作用域的。在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直
到找到该变量,否则会报未定义未定义的错误。python的作用域分为四大类:
a.局部作用域(Local):函数内部的作用域
b.闭包空间(Enclosing function):嵌套在函数内部的作用域或者嵌套在局部作用域内的作用域
c.全局作用域(Global):模块级别的作用域。简单讲就是和函数定义def同样缩进的变量,当前脚本的最外层定义的变量
d.内置变量(Built-in):系统内置模块的变量,int、array等。
2、、python函数寻找变量规则函数寻找变量规则
局部域变量 > 闭包空间变量 > 全局域变量 > 内建模块变量,简称:LEGB。独立的局部域与局部域之间是不能跨域访问
的。局部可以访问全局变量但是不能修改,只读。
此时,一切明了。UnboundLocalError翻译:访问未初始化的局部变量。在本代码中print(x),先在局部域中寻找变量
x,结果就发现了x,但是,x在下一行代码中才进行赋值、初始化。所以,错误的意思是你访问到了x,但是x还没有进行赋
值,没有指定内存指向,于是报错访问未初始化的局部变量。这时我的理解为函数定义时或者调用时,就已经生成一个局部作
用域以及他所包含的局部变量。同时,也可以理解第二段代码中即使定义了全局变量x = 40 ,依然报错。
还有一种异常叫做NameError,翻译:未声明/初始化对象 (没有属性)。简单理解就是没有在任何域中发现变量名字。
三、良药三、良药
如果你想在局部作用域内改变全局变量,则要使用global关键字,或者在函数内部命名变量时不与全局变量重名。
参考:
https://www.runoob.com/python3/python3-namespace-scope.html
作者:pypy哥
资源评论
weixin_38635323
- 粉丝: 9
- 资源: 955
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功