首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候用Python创建符号表?

问什么时候用Python创建符号表?
EN

Stack Overflow用户
提问于 2013-10-14 08:05:19
回答 1查看 1.9K关注 0票数 0
代码语言:javascript
复制
def square():
    print(a)
    a = 10
    b = a*a
    return b

a = 2

print(square())

UnboundLocalError:赋值前引用的局部变量a

代码语言:javascript
复制
def square():
    print(a)
    #a = 10
    b = a*a
    return b

a = 2

print(square())

我只想确定为什么第二种情况是正确的,而第一种情况是错误的。

函数的执行引入了一个新的符号表,用于函数的局部变量。更准确地说,函数中的所有变量赋值都存储在本地符号表中;而变量引用首先在本地符号表中查找,然后在封闭函数的本地符号表中,然后在全局符号表中,最后在内置名称表中。

当解释器正在处理函数的定义时,它会创建一个符号表。它首先认为a是全局的(由于打印(A)),然后在本地符号表中创建'a‘(由于赋值)。

因此,在实际执行函数时,'a‘是一个没有绑定的局部。因此出现了错误。

我对符号表的推理正确吗??

更新:在分配后添加全局:

代码语言:javascript
复制
def square():
    print(a)
    a = 10
    b = a*a
    global a
    return b

a = 2

print(square())

print(a)

global a语句是否从square函数的本地符号表中删除名称'a'?

EN

回答 1

Stack Overflow用户

发布于 2013-10-14 08:21:18

这是范围问题。检查这个答案:https://stackoverflow.com/a/293097/1741450

可以访问局部函数变量以外的作用域中的变量,但如果没有进一步的语法,则不能返回到新参数。相反,赋值将创建一个新的局部变量,而不是影响父作用域中的变量。

第一个例子是错误的,因为a不能修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19355848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档