- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我从 C# 和 Java 开始第一次涉足 Python。到目前为止还不错,但我似乎无法理解的一个概念是如何初始化将在许多模块和包中使用的长生命周期变量?
在 C# 中,我可以有一个 Environment
或 Config
类,它们在应用程序启动时实例化并通过依赖注入(inject)或其他可以保存值的机制传递。
作为一个具体示例,我正在使用 SQLAlchemy 执行我的数据库插入。我创建了一个模块 db.py
,其中的数据库代码如下所示:
engine = create_engine('dburl', echo=True)
conn = engine.connect()
metadata = MetaData()
table_mytable = Table('mypackage', metadata,
Column('id', String, primary_key=True),
Column('mystuff', String),
ins = table_mytable.insert()
def insert():
result = conn.execute(ins)
然后其他代码导入我的 db
模块并使用 insert
函数进行插入。
我遇到的问题是,每次我导入我的数据库模块以供使用时,engine
、conn
、metadata
和 table_my_table
变量被重新创建,所以基本上每次导入我都重新连接到 db
并重新定义所有元数据?
这是正确的和预期的事情吗?还是有更好的方法来解决这个问题?
最佳答案
What I am having trouble with is, everytime I import my db module for use, will the
engine
,conn
,metadata
andtable_my_table
variables be re-created so essentially for every import I am reconnecting to thedb
and re-defining all the meta data?
没有。 Python 缓存导入:导入一次的模块不会再次导入,而是重复使用导入的模块。
您可以通过将 test.py
放在某个目录中来验证这一点:
print("foo")
并启动一个 python 解释器:
>>> import test
foo
>>> import test
您会注意到代码只运行一次。
Or is there a better way to approach this?
因此,拥有模块全局变量是保持整个程序运行需要保持状态的有效方法。
关于python - 如何初始化长生命周期变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340015/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!