python导入全局变量,但调用函数

python导入全局变量,但调用函数,python,Python,我的python模块中有两个全局变量: load.py: 我想在我的测试文件中导入: test.py: 然而,我发现b也被调用,load_b()也被调用 而且load_b()可能会花费很多时间 因此,我的问题是如何只加载a而不调用load_b()函数import始终自上而下执行模块。如果不完全执行模块,则无法加载特定变量名: from load import a 相当于: # test.py import load a = load.a 您不能只加载模块的一部分,这种行为有许多基本原理。例

我的python模块中有两个全局变量: load.py:

我想在我的测试文件中导入: test.py:

然而,我发现b也被调用,
load_b()
也被调用 而且
load_b()
可能会花费很多时间
因此,我的问题是如何只加载a而不调用
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\u a
也可能更改全局变量

函数对象的内置
\uuuuu模块\uuuuu
名称与实际定义函数的模块相关联,即使您使用的是。。。导入…语句:

>>> from load import a_load 
>>> a_load.__module__
'load'
但是,您可以测试标志以防止调用
load_b
,或者您甚至可以使用decorators
@
,当然,在这种情况下有许多解决方法:

if flag_b
    b = load_b()

你应该重新考虑你的设计。如果导入模块想要进行一些初始化,则必须进行初始化。导入的模块应仅提供以下工具:

import load
a = load.load_a()

这样,您的模块会产生更少的意外副作用,并且更易于测试。

该目录中是否有一个空白的“init.py”文件?是的,我只想加载a,但不加载b,但是,b也会被解释,加载函数调用这是定义普通变量的普通Python代码。如果您只想导入
b
,您认为
import
会跳过
a=…
行吗?这不是它的工作原理…最后的变通建议并不是你真正应该做的事情,你应该重新思考你的模块结构。不过剩下的答案很好。@deceze我同意,特别是如果你有数百个这样的调用,你最终会在代码中乱丢这样的标志。它的目的是为了一个简单的任务,但不是很优雅*不要把它当作一个建议,只是一个简化的解决方法;-)@例如,KimyMug,您可以考虑将代码> b= LoopyBy()/代码>移动到另一个模块,以避免在导入模块时对Cux> LoopyB.<代码>的昂贵调用。也可以在代码中实现重构,您可以重构代码,以便仅当模块作为脚本运行时而不是导入时调用
load_b
。然而,在极端的情况下,函数非常慢,您可以考虑重新编码函数来优化它。一个函数可以调用另一个函数,这并不意味着调用者总是比被调用者慢,可能是相反的。
if flag_b
    b = load_b()
import load
a = load.load_a()