python - 防止跨模块重复列表?
问题描述
我对 Python 很陌生,这是一个非常普遍的问题。在我的情况下,它与列表有关,但我相信任何其他类型都会观察到相同的行为。
我在一个模块中定义了一个简单的列表,该列表被导入到其他几个模块中:
list = [MyType(0),
MyType(1),
MyType(2),
MyType(3)]
编辑:
由于 Cireo 和 Grismar 的评论,我认为这是出乎意料的行为。我相信它的发生是因为我使用导入系统的方式。这就是我目前正在做的事情,我才刚刚开始了解它是如何工作的:
__init__.py:
我不完全明白为什么我必须在这里导入所有的项目模块。但是,如果我删除任何一个,我的附加组件(在 Blender 中)接缝会丢失我删除的模块。
# import system module
import sys
# import local modules
# only global_module and sub_module are relevant to this example
from . import global_module, sub_module, another_module, some_other
子模块.py
# import system modules
import bpy
# import local modules
from . import global_module
... access to globals ...
def Function():
var = global_module.data.x
在我的项目中,我会有几个像 sub_module.py 一样工作的模块。其中有几个导入 global_module。global_module 不导入任何本地内容,但列表实例将在那里定义。
有人看到这有什么问题吗?
解决方案
Cireo和Grismar引导我找到了这个问题的答案。这个问题确实是我错误地使用了导入系统造成的。我对此很陌生(并且仍然没有牢牢掌握导入的内部工作原理),所以我不小心将相同的模块文件导入了__init__.py
多次。
在对 Blender 的其他附加组件进行了一些研究和研究后,我对其进行了清理,现在我得到了您所期望的——每个变量的一个实例正在构建。
谢谢你们的帮助。
推荐阅读
- node.js - 有没有办法为整个 npm 项目使用全局变量?
- c# - WPF/XAML:将元素添加到列表类型的依赖项属性
- bash - 理解 bash 代码中的输出的问题
- spring - SpringBootTest 因“IllegalStateException - 未设置 ServletContext”而失败
- jquery - 控制元素出现在 jquery .wrap 中的位置
- api - 设置 Curl 命令以在 Zapier Webhook 中运行
- javascript - 这个集合的数据类型是什么以及如何访问它的值?
- informix - 有没有办法列出informix中的所有模式(包括那些没有任何表和任何特权的模式)?
- ruby-on-rails - 将列名作为变量传递给 ActiveRecord 查询
- excel - 嵌套 For 循环替代方案或优化