Python:主程序开头的导入& PEP 8

时间:2009-10-14 09:20:19

标签: python import main pep8 pep

PEP 8建议在程序开头导入模块。

现在,我觉得在 main 程序的开头导入其中一些(即在if __name__ == '__main__'之后)是有道理的。例如,如果主程序从命令行读取参数,我倾向于在 main 程序的开头执行import sys:这样,sys不必在代码用作模块时导入,因为在这种情况下,不需要命令行参数访问。

这对PEP 8的侵权有多严重?我应该避免这样做吗?或者修改PEP 8是否合理?

5 个答案:

答案 0 :(得分:9)

我无法告诉你这有多糟糕。

但是,我通过仅在第一次使用时导入某些库,大大提高了Web应用程序的性能(响应时间和负载)。

BTW,以下内容也来自PEP 8:

  

但最重要的是:知道什么时候成为   不一致 - 有时是风格   指南只是不适用。什么时候进去   怀疑,用你最好的判断。看   在其他例子,并决定什么   看起来最好。并且不要犹豫   问!

答案 1 :(得分:6)

总的来说,我认为后期导入可能不需要的模块会有很大的危害。

然而sys我肯定会提前导入,在顶部。这是一个很常见的模块,你很可能在脚本的其他地方使用sys而不会注意到它并不总是被导入。 sys也是总是由Python本身加载的模块之一,因此您不会通过避免导入来保存任何模块启动时间(不管是否为sys启动了很多)。

答案 2 :(得分:2)

如果PEP中没有关于您的问题,我建议您做一些您认为最合适的事情。

答案 3 :(得分:2)

导入sys并不需要那么长时间我会担心它。但是,有些模块需要更长的时间 我不认为sys真的堵塞了命名空间。我不会使用一个名为sys的变量或类。

如果你认为把它放在最顶端弊大于利,那么无论如何你都要这样做。 PEP 8只是一个指导原则,你看到的很多代码都不符合它。

答案 4 :(得分:2)

问题不在于表现。

问题在于清晰。

你的“主要”程序今天只是一个主程序。明天,它可能是某个高级主程序中包含的库。之后,它将只是一个更大的包中的一个模块。

由于你的“主要”节目的生活可能会改变,你有两个回应。

  1. 隔离if __name__ == "__main__"内的“主要”内容。这不是对PEP-8的怪诞违反。这是一种合理的包装方式。

  2. 尝试限制“主”程序脚本中的功能数量。尽量将它们保持在importif __name__ == "__main__"之内。如果您的主要脚本很小,那么您的导入问题就会消失。