Python模块标识为di

2024-05-13 20:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有很多密钥对数据。我想有一个包中的数据,以便它可以导入。出于性能和可扩展性的考虑,有没有办法让模块像dict一样工作?你知道吗

示例:

common/pairs/
 ├── BUILDINGS.py
 └── __init__.py

import BUILDINGS

BUILDINGS["foo"] == "bar"

注意:可以通过将声明BUILDINGS放在__init__.py中来存档所需的结果,但是每次都会编译它们,它不是拖拉和不可拖动的,而且看起来很难看。你知道吗

有没有办法做到这一点?到底有没有办法实现呢?你知道吗


Tags: 模块数据pyimport示例fooinit密钥
3条回答

模块已经是dict,其属性存储在BUILDINGS.__dict__。只需做一个实用函数直接写入它。你知道吗

如果我理解正确的话,我想你想要的是pickle

伊恩

In [16]: import pickle

In [17]: mydict = {'this':1, 'is':2, 'my':3, 'dict':4}

In [18]: mydict
Out[18]: {'dict': 4, 'is': 2, 'my': 3, 'this': 1}

In [20]: outfile = open('/tmp/mydict.pickle', 'w')

In [21]: pickle.dump(mydict, outfile)

In [22]: outfile.close()

In [23]: infile = open('/tmp/mydict.pickle', 'r')

In [24]: mydict_loaded = pickle.load(infile)

In [25]: mydict_loaded
Out[25]: {'dict': 4, 'is': 2, 'my': 3, 'this': 1}

我不建议这样做,但是您可以将dict分配到sys.modules。Python并不关心实际存在的是一个module对象。你知道吗

# BUILDINGS.py
from sys import modules
if __name__ != "__main__":
    modules[__name__] = {'a': 1, 'b': 2, ...}

相关问题 更多 >