【问题标题】:Is it "more pythonic" to have all imports at the top, or on demand? [duplicate]将所有导入都放在顶部或按需是“更pythonic”吗? [复制]
【发布时间】:2011-07-15 05:00:05
【问题描述】:

可能重复:
Good or bad practice in Python: import in the middle of a file

我习惯于像 Java 这样的语言,它要求所有 import 语句都出现在类/文件的顶部。

哪个被认为更 Pythonic/“美丽” - 将它们全部放在顶部,或者按需使用?

【问题讨论】:

  • 其他问题的答案似乎都引用了 PEP-8,就好像它本身就是一个答案,并且他们提供了一些您确实希望在其他地方导入的示例。
  • (至于将全局级别的导入放在哪里,是的,在顶部——但导入的内容远不止这些,我认为值得解释。)
  • 另一个相关问题:stackoverflow.com/questions/1024049/…

标签: import python


【解决方案1】:

视情况而定。

大多数时候,您希望它位于顶部。这不是因为 PEP-8(任何以 PEP-8 为理由的人本身都会误解设计原理),而是出于 PEP-8 建议背后的实际原因:

如果您将导入放在函数中,而这些导入不可用,则可能会隐藏问题。而不是在导入模块时抛出异常,它只会在调用某些函数时发生。它的效率也有点低,按需提取名称,尽管这通常是次要的。

但是,这不是硬性规定。您可能希望使用某些类型的特征检测按需导入。例如,

def decode(s):
    try:
        import cjson
        return cjson.decode(s)
    except ImportError:
        import simplejson
        return simplejson.loads(s)
print decode('[1,2,3]')

或类似,

try:
    import cjson
    def decode(s):
        return cjson.decode(s)
except ImportError:
    import simplejson
    def decode(s):
        return simplejson.loads(s)
print decode('[1,2,3]')

您可能还特别希望仅在模块可用时才支持某些方法调用,而不会导致整个模块依赖它。

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2010-11-04
    • 2015-07-08
    • 2018-06-04
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多