在函数内外导入

4 投票
2 回答
9762 浏览
提问于 2025-04-17 00:15

可能重复的问题:
Python的导入语句应该总是在模块的顶部吗?

在一个非常简单的单文件Python程序中,比如

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

# place 1
# import something

def foo():

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

def bar(f):
    ...

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

baz()

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

你会把“导入某个东西”的语句放在第1行还是第2行呢?

2 个回答

5

我基本上同意Robert S.的回答,但有时候把代码放进一个函数里是有道理的。特别是当你想控制导入模块的方式时,这样做很有用。如果你不确定自己是否真的能访问某个特定的模块,这种情况就特别适用。看看这个例子:

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

这甚至可能适用于标准库中的模块(我特别想到的是optparseargparse模块)。

12

PEP 8 规定了以下内容:

  • 导入的内容总是放在文件的最上面,紧接着模块的注释和文档字符串之后,然后再放模块的全局变量和常量。

    导入的内容应该按照以下顺序分组:

    1. 标准库的导入
    2. 相关的第三方库导入
    3. 本地应用程序或库特定的导入

      每组导入之间应该留一行空白。

      在导入之后,放上任何相关的all 说明。

撰写回答