我有一个初始化一些全局变量的Python模块; 这样的事情:
#!/usr/bin/env python
import re
"""My awesome python library."""
# A word list from the standard UNIX dictionary.
with open('/usr/share/dict/words', 'rt') as f:
WORDS_LIST = f.read().split('\n') + ['http'] + ['fubob']
# Some compiled regular expressions.
COMPILED_REG1 = re.compile("a")
COMPILED_REG2 = re.compile("b")
# Some constants.
A = 10
B = 20
def say_hello(): print('hello')
def do_something(): return 'something'
Run Code Online (Sandbox Code Playgroud)
当然它可以工作,但我觉得这不是正确的方法:每次我导入这个模块时,Python都会执行它.在此示例中,它将读取文件并编译正则表达式.
我读到有些人创建了一个config.py文件并用它做了一些事情,但我不确切知道它是如何工作的.
所以,我想知道如果你必须制作一个标准的Python库,你将如何处理这个问题.
每次我导入这个模块时,Python都会执行它
这是不正确的.Python 第一次导入时只执行一次模块全局变量.然后将生成的模块对象存储在sys.modules后续导入中并重新用于后续导入.请参阅import声明文件:
一旦知道模块的名称(除非另有说明,术语"模块"将指代包和模块),搜索模块或包可以开始.检查的第一个位置是
sys.modules先前导入的所有模块的缓存.如果在那里找到该模块,则在导入的步骤(2)中使用它.
你正在做的是正确的方法,这正是标准的Python库模块所做的.
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |