【发布时间】:2013-12-24 14:37:57
【问题描述】:
python style guide 建议将导入分组如下:
进口应按以下顺序分组:
- 标准库导入
- 相关的第三方进口
- 本地应用程序/库特定导入
但是,它没有提及应如何布置两种不同的导入方式:
from foo import bar
import foo
有多种方法可以对它们进行排序(假设所有这些导入都属于同一个组):
-
首先是
from..import,然后是importfrom g import gg from x import xx import abc import def import x -
首先是
import,然后是from..importimport abc import def import x from g import gg from x import xx -
按模块名称的字母顺序,忽略导入的种类
import abc import def from g import gg import x from xx import xx
PEP8 没有提及此功能的首选顺序,并且某些 IDE 可能只是执行该功能的开发人员喜欢的任何“清理导入”功能。
我正在寻找另一个 PEP 澄清这一点或来自 BDFL(或其他 Python 核心开发人员)的相关评论/电子邮件。 请不要发表主观的答案来陈述你自己的喜好。
【问题讨论】:
-
我怀疑是否有“正确”的方式。选择自己的风格有什么问题?如果没有人知道,就几乎不可能有约定。这真的很重要吗?指定这个有什么好处?
-
另见此相关主题:Import order coding standard。
-
@ThiefMaster 您可能已经决定了哪种风格最适合您,尽管我不得不说这始终与您从事的项目有关。如果您在 twitter 工作并且他们的 python 项目不遵循上述任何一种(想象的场景),那么您将不得不编写痛苦、丑陋的代码,因为项目内的一致性高于个人偏好。现在 PyCharm 使用您的 #2 优化导入,即首先使用
import,然后使用from .. import ..,无论字典顺序如何;我选择(在我的项目中)你的#3,因为这就是谷歌所做的,每当 PEP8 不完整时,我都会与谷歌一起执行它:) -
有趣的问题。我从未见过我最喜欢的顺序(当然是在组内) - 一直是字母顺序!这意味着
from在import之前。毕竟,from __future__ import print_function应该是您的第一个导入? (我实际上将__future__导入视为第 0 组,它位于标准导入之前。 -
@alko 如果您在情感上与结束问题息息相关,以至于您“几乎无法克制”自己从“结束问题的乐趣”中解脱出来,那么它几乎无助于构建有用问题的目录!请考虑改造自己以进行客观分析。 SO有一个问题,你显然是其中的一部分。
标签: python coding-style python-import pep8