当前位置: 首页 > 面试题库 >

排序Python`import x`和`from x import y`语句的正确方法是什么?

昝唯
2023-03-14
问题内容

该蟒蛇风格指南建议对进口组这样的:

导入应按以下顺序分组:

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

但是,它没有提及应如何布置两种不同的进口方式的内容:

from foo import bar
import foo

对它们进行排序有多种方法(假设所有这些导入都属于同一组):

  • 首先from..import,然后import

    from g import gg
    

    from x import xx
    import abc
    import def
    import x

  • 首先import,然后from..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没有提到此命令的首选顺序,某些IDE的“清理导入”功能可能只是该工具的开发人员所做的任何事情。

我正在寻找另一个PEP来澄清此问题,或从
BDFL
(或另一个Python核心开发人员)
那里 获得相关的评论/电子邮件
请不要发布主观答案来说明您的个人偏好。


问题答案:

进口商品通常按字母顺序排序,并在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

要么

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-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

参考文献:

  • 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实用程序会自动对您的导入进行排序。



 类似资料:
  • 问题内容: 这些方法之间在功能上有区别吗? 编辑(从其他贡献者添加了此语法): 问题答案: 不,但第一个是首选样式。 编辑: 另一个选项是 此外,它还允许调用者使用varargs语法。

  • 问题内容: 我正在尝试在内添加HTML代码段,但无法使用包含功能。看来的当前语法与以前的语法不同:我看到许多示例使用 但是在官方文档中,它说使用 但随后在页面下方显示为 无论如何,我尝试了 我的代码片段不是很多代码,但是有很多事情要做。这可能会引起问题,所以我只用单词代替了内容,仍然一无所获。 我还尝试过直接在页面中声明模板,如下所示: 并遍历了引用脚本的所有变体,仍然一无所获。 我的页面还有很多

  • 问题内容: 我是一名新的Python程序员,他正在从2.6.4跃升至3.1.1。在我尝试使用“ else if”语句之前,一切都很好。解释器在“ else if”中的“ if”之后给了我一个语法错误,原因是我似乎无法弄清。 我可能缺少一些非常简单的东西;但是,我无法自行找到答案。 问题答案: 在python中,“ else if”被拼写为“ elif”。 另外,您还需要在和之后加上一个冒号。 简单

  • 问题内容: 目标: 使用C#和SQL2008正确设置参数化的SQL插入语句 问题: for循环中使用了以下语句,因此必须清除这些值。运行此代码后,它指出在250附近有语法错误。代码如下 } 在此先感谢您的更正,评论和建议。 问题答案: 您不必在SQL代码中重新声明变量。这应该工作:

  • 问题内容: 我正在使用vb.net和Access 2010作为数据库(.accdb) 这适用于MySQL: 但是,当将相同的查询传递给Access时,出现以下错误: 因此,我假设CASE语句的访问权限不同,或者访问是否完全具有该功能? PS is_enable为布尔值 问题答案: 弄清楚了: Access 2010没有CASE功能,我们改用SWITCH。 感谢

  • 问题内容: 对于具有所有带有公共静态方法的实用程序类,正确的方法是什么? 我应该使用最终班还是抽象班? 请提出建议。 例如: 要么 问题答案: 有自己的目的。如果您希望其他类()实现某些类功能,则可以使用abstract。 如果它只是实用程序类,但是您不希望其他类将其子类化,那么我将选择类。如果实用程序类只有方法,则您无法以任何方式覆盖它们,因此将它们也包含在类中也没有区别。