仅在函数中导入模块是否正确,而不是在文件的开头?
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 module
或from module import func_a
。它看起来更干净,更好。如果您只想导入一个或两个函数,只需使用第二个函数。
pep08 recommands that all imports should happen at the beginning of the module,这是要走的路,除非你有一个非常令人信服的理由不这样做。
我能想到的唯一原因是两个模块之间的循环依赖(模块A尝试导入模块B,尝试导入模块A等......)但是最好通过分解公共元素来干净地解决问题。第三个模块既不依赖于A也不依赖于B.
- 如果仅在
some_module
中使用def main():
,则可以在函数中导入它。 - 在大多数情况下,它并没有改善Should Python import statements always be at the top of a module?中的状态
- 它也打破了PEP8的规则
以上是关于仅在函数中导入模块是否正确,而不是在文件的开头?的主要内容,如果未能解决你的问题,请参考以下文章
如何在vue.js项目的main.js文件中导入js类并在所有组件中使用它而不是在每个组件中导入?
什么是从同一个文件中导入多个组件的正确方法,而不是导入每个组件