首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:什么时候globals().update有效,什么时候不行

Python:什么时候globals().update有效,什么时候不行
EN

Stack Overflow用户
提问于 2014-01-16 15:49:06
回答 1查看 2.2K关注 0票数 0

我知道,如果可能的话,应该避免更新局部变量()或globals()。据我所知,在函数中更新局部变量()通常会在引用更新后的变量时生成NameError,如下所述:

How can I load all keys from a dict as local variables, a better aproach?

我的理解是,解释器为局部变量创建一个静态查找表,从而更改为局部变量(),并且在运行时不可见。

那么更新globals()如何?这似乎也不是一个非常好的主意。为什么以下代码失败:

代码语言:javascript
复制
def foo():
    globals().update({'a': 1})
    print a
    if False: a = 0

>>> foo()
UnboundLocalError: local variable 'a' referenced before assignment

当移除未执行的if False: a = 0分配时有效吗?

如果解释器出于性能原因创建了一个查找表,难道不应该考虑在运行时不会执行的语句吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-16 15:52:51

这与您对globals dict的更新没有任何关系。如果你这样做,你会得到完全相同的结果:

代码语言:javascript
复制
a = 1

def foo():
    print a
    if False: a = 0

foo()

这是因为在作用域内没有显式标记为global的变量的任何赋值都会使变量在整个作用域中处于局部性。

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

https://stackoverflow.com/questions/21166454

复制
相关文章

相似问题

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