我在Python模块哈瓦两个全局变量: load.py:蟒蛇进口全局变量,但调用的函数
a = load_a()
b = load_b()
我想在我的测试文件导入: test.py:
from load import a
然而,我发现,b也叫,load_b()
也被称为 和load_b()
可能会花费大量的时间 所以我的问题是我怎么能只加载但不叫load_b()
功能
我在Python模块哈瓦两个全局变量: load.py:蟒蛇进口全局变量,但调用的函数
a = load_a()
b = load_b()
我想在我的测试文件导入: test.py:
from load import a
然而,我发现,b也叫,load_b()
也被称为 和load_b()
可能会花费大量的时间 所以我的问题是我怎么能只加载但不叫load_b()
功能
import
总是从上到下执行模块。加载特定变量的名字也不是没有可能完全执行模块:
from load import a
是等价的:
# test.py
import load
a = load.a
你不能只加载一个模块的一部分,有许多理由这种行为。例如,您load_a
功能可以使用之前或之后load_a
函数中定义的全局变量:
def load_a(arg):
if arg in table:
# do something here...
table = [1,2,3,4]
load_a
也可以改变可能的全局变量。
的函数对象的内置__module__
名字与这里居然被定义的功能模块相关联,即使您使用from ... import ...
声明:
>>> from load import a_load
>>> a_load.__module__
'load'
然而,您可以测试标志,以防止调用load_b
或者你甚至可以用装饰@
,也有这种情况,当然许多变通方法:
if flag_b
b = load_b()
你应该重新考虑你的设计。如果导入模块想要做一些初始化,它应该必须这样做。进口模块应该只提供工具:
import load
a = load.load_a()
这样,你的模块将有较少的意想不到的副作用,并将更具可测试性。
你在那个目录中有一个空白的'__init__.py'文件吗? – Exprator
是的,我想只加载一个,但不是B,但是,B也是解释和load_b()函数调用 –
这是所有正常的Python代码,定义正常变量。如果你只想导入'b',你认为'import'会跳过'a = ...'行吗?这不是它的工作原理...... – deceze