use*_*207 5 python python-import python-3.x
假设我想导入一个 python 库以在函数内部使用。是在函数内导入库更好还是全局导入更好?
做这个
def test_func:
import pandas as pd
# code implementation
Run Code Online (Sandbox Code Playgroud)
或者在 python 文件顶部添加以下行以全局导入?
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
每种方法的优点和缺点是什么?python 中的最佳实践是什么?
我正在使用 python v3.6
编辑:需要做出一些澄清。
假设我有两个函数。
def func1:
import pandas as pd
# code implementation
def func2:
import pandas as pd
# code implementation
Run Code Online (Sandbox Code Playgroud)
python 脚本运行这两个函数。该库是否会被导入两次,或者 python 编译器是否足够聪明,只导入一次?这会影响性能。
这是名称可见性和执行时间点的差异。当您正在加载的文件被导入或运行时,模块级导入就会被导入。显然,只有当该函数运行时,该函数才是本地函数。导入的名称对于文件中的所有内容都可见,或者仅在执行导入的函数内可见。
由于命中 import 语句是有成本的(虽然很小,但仍然如此),本地语句将始终执行,而不仅仅是一次。不过,它不会完全重新导入模块,Python 会在第一次导入模块后对其进行缓存(请参阅reload和sys.modules)。
显然,最佳实践是使用模块级导入,这就是您在 99.999% 的代码中看到的。一个重要的原因是可维护性 - 如果您想了解模块具有哪些依赖项,只需查看顶部即可方便,而不必梳理所有代码。
那么什么时候使用函数本地导入呢?
有以下三种情况:
您不能提前使用导入。例如,当在运行时通过配置或系统检查选择数据库或其他系统/功能的后端时,就会发生这种情况。
否则你有循环导入。这是一种罕见的情况,也是一种代码味道,因此如果有必要,请考虑重构。
通过推迟模块导入来减少启动时间。但这很少有用。
因此,对于您的情况,答案是快速而简单的“不要这样做”。