首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中创建模块范围的变量?

如何在Python中创建模块范围的变量?
EN

Stack Overflow用户
提问于 2009-12-29 22:34:16
回答 5查看 340.4K关注 0票数 283

有办法在模块内设置全局变量吗?当我试图以如下所示的最明显的方式来做它时,Python解释器说变量__DBNAME__不存在。

代码语言:javascript
运行
复制
...
__DBNAME__ = None

def initDB(name):
    if not __DBNAME__:
        __DBNAME__ = name
    else:
        raise RuntimeError("Database name has already been set.")
...

在导入另一个文件中的模块之后

代码语言:javascript
运行
复制
...
import mymodule
mymodule.initDB('mydb.sqlite')
...

追踪结果是:

...UnboundLocalError:在赋值前引用的局部变量'DBNAME‘.

有什么想法吗?按照this fellow's的建议,我试图使用一个模块来设置一个单例。

EN

Stack Overflow用户

发布于 2009-12-30 03:11:04

你正在陷入一种微妙的怪癖。您不能在python函数中重新分配模块级变量。我认为这是为了阻止人们偶然地在一个函数中重新分配东西。

您可以访问模块名称空间,只是不应该尝试重新分配。如果您的函数指定了什么,它就会自动成为一个函数变量-- python将不会查看模块名称空间。

你可以:

代码语言:javascript
运行
复制
__DB_NAME__ = None

def func():
    if __DB_NAME__:
        connect(__DB_NAME__)
    else:
        connect(Default_value)

但是不能在函数中重新分配__DB_NAME__

一个解决办法是:

代码语言:javascript
运行
复制
__DB_NAME__ = [None]

def func():
    if __DB_NAME__[0]:
        connect(__DB_NAME__[0])
    else:
        __DB_NAME__[0] = Default_value

注意,我没有重新分配__DB_NAME__,我只是修改它的内容。

票数 -11
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1977362

复制
相关文章

相似问题

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