首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局NameError

全局NameError
EN

Stack Overflow用户
提问于 2014-12-27 17:43:46
回答 2查看 61关注 0票数 0

在一些Python模块中,我有如下代码:

代码语言:javascript
复制
try:
    someGlobal
except NameError:
    someGlobal = []

如果我想支持模块重新加载,并且某些对象不能被覆盖(例如,因为我知道它是直接引用的),这可能很重要。

许多编辑器(例如PyCharm)将此标记为错误。是否还有其他方法来编写同样的代码,这更符合Python的习惯呢?或者这已经是Python的习语了,而抱怨这一点是编辑们的过错吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-27 17:57:53

我会和

代码语言:javascript
复制
if 'someGlobal' not in dir():
    someGlobal = 23

这具有简单性的优点,但是如果模块有很多全局,这可能会有点慢,因为dir()是一个list,而它上的in操作符是O(N)

就速度而言,在简单性方面处于一个小小的劣势,

代码语言:javascript
复制
if 'someGlobal' not in vars():
    someGlobal = 23

这应该更快,因为vars()是一个dict,所以它上的in操作符是O(1)

票数 4
EN

Stack Overflow用户

发布于 2014-12-27 17:47:18

这是一个错误,至少给出了编辑器可用的信息。所以编辑器没有错,只是您专门为错误编写代码。

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

https://stackoverflow.com/questions/27669827

复制
相关文章

相似问题

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