【问题标题】:Importing modules in Python - recommended position在 Python 中导入模块 - 推荐位置
【发布时间】:2013-12-05 21:22:29
【问题描述】:

这是一个关于良好python 编码和定位的问题。

我有一个有点大的代码,我使用了很多外部模块/包/函数。目前我将它们全部加载到代码的最顶部,因为这就是我所看到的。例如,当我需要注释掉一段代码进行测试时,这很麻烦,因为我需要继续查找该块正在使用的模块并将它们也注释掉。我知道我没有必须做这最后一部分,但我这样做是为了保持一致性,因为我不喜欢导入我不会使用的东西。

如果导入的模块列在使用它们的块的右侧,这个过程会更容易,代码也更容易理解,至少对我来说是这样。

我的问题是是否建议在代码开头导入所有模块,还是应该在必要时在整个代码中导入?

【问题讨论】:

  • 这是您决定什么对您更重要的地方——每个人都会认可的共同风格,或者您自己的方便。但是,不要仅仅因为您暂时注释掉了一些用于测试的代码就注释掉了导入。它没有任何作用,而且很容易出错,因为导入的模块可能会在文件中的多个位置使用,而不是所有这些位置都被删除。
  • 我的答案的侧点(这实际上只是一种意见):是否可以重构您的代码以更好地隐藏/划分这些依赖项?听起来您的代码可能比健康的代码更单一;将其分开可能还有其他好处,而不仅仅是跟踪进口。

标签: python module coding-style workflow


【解决方案1】:

官方建议开头导入,见PEP8

导入总是放在文件的顶部,就在任何模块 cmets 和文档字符串之后,模块全局变量和常量之前。

进口应按以下顺序分组:

  • 标准库导入
  • 相关的第三方进口
  • 本地应用程序/库特定导入
  • 您应该在每组导入之间放置一个空行。

将任何相关的__all__ 规范放在导入之后。

【讨论】:

    【解决方案2】:

    好吧,我会说这样做对你来说最简单。但我认为遵循 PEP8 建议(已在另一个答案中引用)通常是最好的方法。以这种方式在一个地方查看您的模块引用的所有内容会更容易,这也是新程序员以后希望将他们的导入添加到您的代码中的地方。

    顺便说一句,此页面提供了一个您可能违反此约定的原因,https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead

    请注意,将导入放入函数中可以加快模块的初始加载速度,尤其是在可能不需要导入的模块时。这通常是一种“惰性”优化的情况——避免工作(导入一个可能非常昂贵的模块),直到您确定它是必需的。

    如果一个模块的导入很昂贵(它很大,或者有副作用),那么你可能想稍后再放它。简而言之,如果您想关注“Python之禅”的这一部分:

    虽然实用胜于纯粹。

    wrt 到您的导入位置,然后这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 2010-11-11
      • 1970-01-01
      • 2022-11-30
      • 2022-01-04
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      相关资源
      最近更新 更多