在函数中导入python库与全局导入之间有何区别?

用户名

假设我要导入一个在函数内部使用的python库。在函数中导入库还是全局导入更好?

做这个

def test_func:
    import pandas as pd
    # code implementation

还是在python文件顶部的下面一行要全局导入?

import pandas as pd

每种方法的优缺点是什么?哪一种是python的最佳做法?

我正在使用python v3.6

编辑:做一些澄清。

假设我有2个功能。

def func1:
    import pandas as pd
    # code implementation   

def func2:
    import pandas as pd
    # code implementation   

python脚本运行两个函数。该库会被导入两次还是python编译器足够聪明以至于只能导入一次?这会影响性能。

矮人

名称可见性和执行时间点有所不同。导入文件或自行运行时,将导入模块级导入。仅当该函数运行时,该函数才是本地函数。导入的名称对于文件中的所有内容都是可见的,或者仅在执行导入的函数中可见。

由于击中import语句(虽然很小,但仍然很昂贵)会产生成本,所以本地语句将始终执行,而不仅仅是执行一次。但是,它不会完全重新导入模块,python会在第一次导入模块时缓存模块(请参阅reloadsys.modules)。

显然,最佳实践是使用模块级别的导入,这就是您在99.999%的代码中看到的。可维护性是一个很大的原因-如果您想了解模块具有的依赖关系,只需查看顶部即可,而不必梳理所有代码,这很方便。

那么什么时候使用本地导入功能呢?

有以下三种情况:

  • 您不能更早使用导入。例如,在运行时通过配置或系统检查选择了数据库或其他系统/功能的后端时,就会发生这种情况。

  • 否则,您将有循环进口。这是一种罕见的情况,也是一种代码气味,因此,如果有必要,请考虑进行重构。

  • 通过推迟模块导入来减少启动时间。但是,这很少有用。

因此,对于您的情况,答案是快速而简单的“不做”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章