随着时间的推移,我已经为各种事情建立了一系列实用函数。
我想将它们全部放在包中,其结构比仅包含所有功能的单个文件要多一些。
其中一些函数是在假设已导入某些包的情况下编写的,例如我有一些numpy
and pandas
假设类似的效用函数import numpy as np
显然我不会像这样使用这个假设的包from <pkg> import *
但我也不想妨碍性能。
所以如果我有一个numpy
实用函数,我应该将其添加到每个函数中吗
# mypkg.np.utils
import sys
def np_util_fn(...):
if 'np' not in sys.modules: import numpy as np
# rest of func
or
# mypkg.np.utils
import sys
if 'np' not in sys.modules: import numpy as np
def np_util_fn(...):
# rest of func
如果我使用此包的不同部分,哪个性能更高?例如from pkg.other.utils import fn
好吧,我们来分析一下你的问题。假设你有一个文件module.py
:
print("Module got imported")
和一个文件test.py
with:
import module
import module
。如果你现在执行test.py
你会得到
Module got imported
。请注意,该行不会输出两次。这意味着 python 已经检查模块是否已经导入(在重新导入之前)。所以你的支票if 'np' not in sys.modules: import numpy as np
不需要。此检查只会延迟事情,因为它可能会导致双重检查。
如果您想重新导入您需要的模块reload(module)
。所以如果你有
import module
import module
reload(module)
in code.py
你会看到这条线Module got imported
两次。
这意味着
import numpy as np
足够了。无需检查它是否已通过以下方式导入:
if 'np' not in sys.modules: import numpy as np
这取决于这样做是否有利import numpy as np
在脚本的最开始或函数中。如果该函数被执行多次,那么只在最开始时执行是有利的。否则,您将始终重新检查“np”是否不在 sys.modules 中。相反,如果您认为您的函数不经常被调用/不一定在您的程序中执行(例如,因为它取决于用户输入),那么导入此函数可能是有利的(从速度的“点vu”来看)仅在函数中的模块。
我通常不使用任何import
函数中的语句,因为我总有一种感觉,它们会破坏函数体,从而降低可读性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)