什么是正确的方式来sortingPython的`importX`和`从XimportY`语句?
python风格指南build议像这样分组导入:
import应按以下顺序进行分组:
- 标准库导入
- 有关的第三方import
- 本地应用程序/库特定的导入
但是,它并没有提到两种不同的import方式:
from foo import bar import foo
有多种方法可以对它们进行sorting(让我们假设所有这些导入属于同一个组):
-
先从
from..import
import
,然后import
from g import gg from x import xx import abc import def import x
-
先
import
,然后从from..import
import
import 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没有提到这个优先顺序,而“清理导入”function有些IDE可能只是做了那个function的开发者所喜欢的。
我正在寻找另一个PEP来澄清这个或BDFL (或另一个Python核心开发者) 的相关评论/电子邮件 。 请不要张贴您自己的偏好的主观答案。
import通常按字母顺序排列,并在PEP 8旁边的不同位置进行描述。
按字母顺序sorting的模块更快速阅读和search 。 毕竟Python是关于可读性的。 另外,更容易validation是否导入了某些内容,并避免重复导入
在PEP 8中没有关于sorting的东西。所有关于select你使用的东西。
根据信誉良好的网站和知识库也很less受欢迎的参考,字母顺序是方式。
例如像这样:
import httplib import logging import random import StringIO import time import unittest from nova.api import openstack from nova.auth import users from nova.endpoint import cloud
要么
import a_standard import b_standard import a_third_party import b_third_party from a_soc import f from a_soc import g from b_soc import d
Reddit官方知识库还指出,一般应使用PEP-8import顺序。 但是有一些补充是
for each imported group the order of imports should be: import <package>.<module> style lines in alphabetical order from <package>.<module> import <symbol> style in alphabetical order
参考文献:
- https://code.google.com/p/soc/wiki/PythonStyleGuide
- https://github.com/reddit/reddit/wiki/PythonImportGuidelines
- http://docs.openstack.org/developer/hacking/
- http://developer.plone.org/reference_manuals/external/plone.api/contribute/conventions.html#grouping-and-sorting
PS: isort工具会自动对您的导入进行sorting。
PEP 8确实没有提到这一点。 这一点没有任何约定,并不意味着Python社区需要绝对定义一个。 一个项目的select可能会更好,但对另一个项目来说最糟糕的是…这是一个偏好的问题,因为每个解决scheme都有其优点和缺点。 但是,如果你想遵循惯例,你必须尊重你引用的主要命令:
- 标准库导入
- 有关的第三方import
- 本地应用程序/库特定的导入
例如, Googlebuild议在这个页面中按照字典顺序对每个类别(标准/第三方/你的) 进行sorting 。 但在Facebook,雅虎等等,这可能是另一个公约…
根据中央情报局的内部编码惯例( WikiLeaks Vault 7漏洞的一部分 ),python的input应该分为三组:
- 标准库导入
- 第三方import
- 应用程序特定的导入
import应该在这些群体中按字母顺序排列,忽略情况:
import foo from foo import bar from foo.bar import baz from foo.bar import Quux from Foob import ar