仅在函数中导入模块是否正确,而不是在文件的开头?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在函数中导入模块是否正确,而不是在文件的开头?相关的知识,希望对你有一定的参考价值。

所以,我有一个关于import ModuleName的问题,我应该把这个运算符放在哪里。在文件的开头或函数中?

import some_module

def main():
    some_module.SomeStuff()

要么:

def main():
    import some_module
    some_module.SomeStuff()

但是,如果我将它用于多个功能?这是正确的还是愚蠢的?或者我需要使用__init__函数创建类:self.module = some_module.SomeStuff()?然后在类下的其他函数中调用它?

答案

创建一个导入类不是pythonic实际上它是坏的。您应该将模块作为名称空间导入以调用该模块中的函数,或者您可以导入特定的函数:

from some_module import SomeFunc1, SomeFunc2
# or
import some_module
some_module.SomeFunc1()

Import语句必须位于源文件的顶部(查看pep8)

另一答案

正确的方法是在文件的开头import modulefrom module import func_a。它看起来更干净,更好。如果您只想导入一个或两个函数,只需使用第二个函数。

另一答案

pep08 recommands that all imports should happen at the beginning of the module,这是要走的路,除非你有一个非常令人信服的理由不这样做。

我能想到的唯一原因是两个模块之间的循环依赖(模块A尝试导入模块B,尝试导入模块A等......)但是最好通过分解公共元素来干净地解决问题。第三个模块既不依赖于A也不依赖于B.

另一答案

以上是关于仅在函数中导入模块是否正确,而不是在文件的开头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 文件中导入 Kotlin 文件

如何在vue.js项目的main.js文件中导入js类并在所有组件中使用它而不是在每个组件中导入?

什么是从同一个文件中导入多个组件的正确方法,而不是导入每个组件

如何在 Android Studio 中导入模块而不创建副本

无法在nodejs中导入带有require()的模块

导入内部测试而不是在模块的开头是不是更pythonic?