在Python中初始化全局变量的正确方法

blu*_*fer 5 python

我有一个初始化一些全局变量的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库,你将如何处理这个问题.

Mar*_*ers 7

每次我导入这个模块时,Python都会执行它

这是不正确的.Python 第一次导入时执行一次模块全局变量.然后将生成的模块对象存储在sys.modules后续导入中并重新用于后续导入.请参阅import声明文件:

一旦知道模块的名称(除非另有说明,术语"模块"将指代包和模块),搜索模块或包可以开始.检查的第一个位置是sys.modules先前导入的所有模块的缓存.如果在那里找到该模块,则在导入的步骤(2)中使用它.

你正在做的是正确的方法,这正是标准的Python库模块所做的.