将所有导入放在顶部更“Pythonic”,还是按需导入?

5 投票
1 回答
2530 浏览
提问于 2025-04-16 13:40

可能重复的问题:
在Python中:在文件中间导入是好习惯还是坏习惯

我习惯使用像Java这样的语言,在这些语言中,所有的import语句必须放在类或文件的最上面。

在Python中,哪种方式更“优雅”呢?是把所有的导入语句放在最上面,还是根据需要随时导入?

1 个回答

10

这要看情况。

大多数时候,你会想把导入放在文件的最上面。这并不是因为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]')

你可能还希望只有在某个模块可用时才支持特定的方法调用,而不想让整个模块都依赖于它。

撰写回答