python导入全局变量,但调用函数
我的python模块中有两个全局变量: load.py: 我想在我的测试文件中导入: test.py: 然而,我发现b也被调用,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 您不能只加载模块的一部分,这种行为有许多基本原理。例
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()