前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python变量引用错误

Python变量引用错误

作者头像
狼啸风云
修改2022-09-02 21:23:33
1.3K0
修改2022-09-02 21:23:33
举报
代码语言:javascript
复制
python UnboundLocalError: local variable 'xxx' referenced before assignment

大意就是在变量定义前就引用了变量。 错误代码如下:

代码语言:javascript
复制
def f():
    print(n)
    n = 10
f()

这里还是很清楚,很明白。 然而下面的代码就令人有些头疼:

代码语言:javascript
复制
n = 100
def f():
    print(n)
    n = 10
f()

虽然定义了变量n,然后在函数内部修改,但是还是报相同的错误。原因在于在函数内部对变量n进行修改后,变量n被python解释器理解为局部变量,就变成和上面代码一样的情况了。

代码语言:javascript
复制
def f():
    print(n)
f()

此时由于没有定义变量n,所以报NameError: name ‘n’ is not defined 注意: 一般情况下,在访问变量时,会先查找本地变量,然后是包裹此函数的外部函数内的变量,之后是全局变量,最后是内建作用域的变量,即:L->E->G->B(E不一定存在)。在默认情况下,变量名赋值会在当前作用域创建变量和修改变量。 作用域     英文解释     英文简写 局部作用域(函数内)     Local(function)     L 外部嵌套函数作用域     Enclosing function locals     E 函数定义所在模块作用域     Global(module)     G python内置模块的作用域     Bui     B

示例如下:

代码语言:javascript
复制
v = 100 # 全局作用域
def fun1():
    v = 200 # 外部嵌套函数作用域
    print('fun1.v=', v)
    print(locals())
    def fun2():
        v = 300 # 局部作用域
        print('fun2.v=', v)
        print(max) # max函数都没有创建,在内建函数作用域中,只读,不能改变 # 可以在其余三个作用域重新创建。
        print(locals())
    fun2()
        
fun1()
print("全局变量.v=", v)
print(max) # max变量定义在内置模块的作用域,是解释执行器提前定义好的
print(locals())
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档