gpt4 book ai didi

函数调用中的 Python 3+ 导入包?

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:11 24 4
gpt4 key购买 nike

加类我已经为各种事物建立了一个实用函数集合。

我想将它们全部放在一个包中,其结构比仅包含所有功能的单个文件要多一些。

其中一些函数是在假定已导入某些包的情况下编写的,例如我有几个numpypandas效用函数假设类似于 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

# 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 包含:

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)

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 语句,因为我总觉得它们会破坏函数体,从而降低可读性。

关于函数调用中的 Python 3+ 导入包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com