从不同的其他模块导入一个模块只执行一次。为什么?

时间:2015-09-17 09:30:24

标签: python-3.x import

我对Python的某些行为感到困惑。我一直认为导入模块基本上意味着执行它。 (就像他们在这里说的那样:Does python execute imports on importation)所以我创建了三个简单的脚本来测试一些东西:

main.py

import config
print(config.a)

config.a += 1
print(config.a)

import test
print(config.a)

config.py

def get_a():
    print("get_a is called")
    return 1
a = get_a()

test.py

import config
print(config.a)
config.a += 1

运行main.py时的输出是:

get_a is called
1
2
2
3

现在我很困惑因为我希望get_a()被调用两次,一次来自main.py,一次来自test.py。有人可以解释为什么不是吗?如果我真的想第二次导入配置怎么办,就像它在a=1开头一样?

(幸运的是,对于我的项目,这种行为正是我想要的,因为get_a()对应于一个函数,它从数据库中读取大量数据,当然我只想读一次,但它应该可以从多个模块访问。)

1 个答案:

答案 0 :(得分:1)

因为配置模块已经加载所以不再需要“运行”它,只需返回加载的实例。

一些标准库模块使用此示例,例如random。它在第一次导入时创建一个Random类对象,并在再次导入时重用它。对该模块的评论如下:

# Create one instance, seeded from current time, and export its methods
# as module-level functions.  The functions share state across all uses
#(both in the user's code and in the Python libraries), but that's fine
# for most programs and is easier for the casual user than making them
# instantiate their own Random() instance.