Thi*_*ter 148 python coding-style pep8 python-import
该蟒蛇风格指南建议对进口组这样的:
应按以下顺序对导入进行分组:
- 标准库导入
- 相关的第三方进口
- 本地应用程序/库特定导入
但是,它没有提到应该如何规划两种不同的进口方式:
from foo import bar
import foo
Run Code Online (Sandbox Code Playgroud)
有多种方法可以对它们进行排序(让我们假设所有这些导入都属于同一个组):
首先from..import,然后import
from g import gg
from x import xx
import abc
import def
import x
Run Code Online (Sandbox Code Playgroud)首先import,然后from..import
import abc
import def
import x
from g import gg
from x import xx
Run Code Online (Sandbox Code Playgroud)按模块名称的字母顺序,忽略导入的类型
import abc
import def
from g import gg
import x
from xx import xx
Run Code Online (Sandbox Code Playgroud)PEP8没有提到这个的首选顺序和"清理导入"功能,一些IDE可能只是做该功能的开发人员所喜欢的任何东西.
我正在寻找另一个PEP澄清这个或来自BDFL(或其他Python核心开发人员)的相关评论/电子邮件.请不要发表陈述您自己偏好的主观答案.
Abh*_*hek 97
进口通常按字母顺序排序,并在PEP 8旁边的各个地方进行描述.
按字母顺序排序的模块可以更快地读取和搜索.毕竟python是关于可读性的.此外,更容易验证某些内容是否已导入,并避免重复导入
PEP 8中没有任何关于排序的信息.所有关于你选择的内容都是如此.
根据信誉良好的网站和存储库的一些参考资料也很受欢迎,按字母排序就是这样.
例如像这样:
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
Run Code Online (Sandbox Code Playgroud)
要么
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
Run Code Online (Sandbox Code Playgroud)
Reddit官方存储库还指出,一般情况下应使用PEP-8导入顺序.然而,有一些补充
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
Run Code Online (Sandbox Code Playgroud)
参考文献:
PS:isort实用程序会自动对您的导入进行排序.
小智 23
根据CIA的内部编码约定(WikiLeaks Vault 7泄漏的一部分),python导入应分为三组:
应在这些组中按字典顺序排序进口,忽略大小写:
import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar
Run Code Online (Sandbox Code Playgroud)
Mar*_*rat 10
我觉得接受的答案有点太冗长了。这是 TLDR:
\n\n\n\n\n\n\n在每个分组中,导入应按字典顺序排序,\n 忽略大小写,根据每个模块\xe2\x80\x99s 完整包路径
\n
所以,第三个选项是正确的:
\n\nimport abc\nimport def\nfrom g import yy # changed gg->yy for illustrative purposes\nimport x\nfrom xx import xx\nRun Code Online (Sandbox Code Playgroud)\n
PEP 8确实没有提到它.这一点没有惯例,并不意味着Python社区需要绝对定义一个.选择对于项目来说可能更好,但对另一个项目来说是最糟糕的...这是一个偏好的问题,因为每个解决方案都有利弊.但是如果你想遵循惯例,你必须尊重你引用的主要订单:
例如,Google建议在此页面中按字典顺序对每个类别(标准/第三方/您的)进行排序.但在Facebook,雅虎等等,它可能是另一个惯例......
我强烈推荐reorder-python-imports。它遵循已接受答案的第二个选项,并且还集成到pre-commit 中,这非常有用。