导入内部或外部功能[重复]

Posted

技术标签:

【中文标题】导入内部或外部功能[重复]【英文标题】:import inside or outside function [duplicate] 【发布时间】:2011-11-02 14:36:31 【问题描述】:

可能重复:Should Python import statements always be at the top of a module?

在一个非常简单的单文件python程序中

# ------------------------

# place 1
# import something

def foo():

   # place 2
   # import something
   return something.foo()

def bar(f):
    ...

def baz():
    f = foo()
    bar(f)

baz()

# ----------------

你会把“import something”放在第 1 位还是第 2 位?

【问题讨论】:

【参考方案1】:

我主要同意 Robert S. 的回答,但有时将其放入函数中是有意义的。特别是如果您想控制导入机制。如果您无法确定您是否真的可以访问特定模块,这将很有用。考虑这个例子:

def foo():
    try:
        import somespecialmodule
        # do something
        # ...
    except ImportError:
        import anothermodule
        # do something else
        # ...

标准库模块甚至可能是这种情况(我特别想到了optparseargparse 模块)。

【讨论】:

如果您这样做,最好在常规导入时的评论中提及它,以便阅读代码的人得到提醒。【参考方案2】:

PEP 8 指定:

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

进口应按以下顺序分组:

    标准库导入 相关的第三方进口

    本地应用程序/库特定导入

    您应该在每组导入之间放置一个空行。

    在导入之后放置任何相关的all规范。

【讨论】:

以上是关于导入内部或外部功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python不被识别为内部或外部命令[重复]

命令问题 - 即使在 PATH 环境变量中,“ng”命令也无法识别为内部或外部 [重复]

从iframe外部调用iframe内部的函数[重复]

Python中的好习惯或坏习惯:在文件中间导入[重复]

为啥内部类的扩展会得到重复的外部类引用?

循环内部是异步的,外部如何同步[重复]