【问题标题】:Pep 8 Conflict, Imports exceed 72 charactersPep 8 冲突,导入超过 72 个字符
【发布时间】:2021-07-23 05:46:35
【问题描述】:

关于 Python 中长导入语句的最佳实践是什么? Pep 8 允许 72-99 个字符长的行,但我发现我经常超过这个限制,当我努力格式化我的其余代码时,这是一种耻辱。

一些团队非常喜欢更长的线路长度。对于维护的代码 完全或主要由可以就此达成协议的团队 问题,可以将行长限制增加到99 字符,前提是 cmets 和 docstrings 仍然包裹在 72 个字符。

来源:https://www.python.org/dev/peps/pep-0008/

当然,您可以只导入整个包。即import numpy as np,但我通常希望尽可能缩短导入时间以避免减少加载时间。

【问题讨论】:

  • 除非您使用 Java 命名约定 (CookieFactoryInterfaceFactoryMaker),否则我认为没有一个合理的用例让您拥有如此长的 import 语句/模块名称。能举个例子吗?
  • “当然,您可以只导入整个包。即,将 numpy 导入为 np,但是我通常希望尽可能缩短导入时间以避免减少加载时间。”等等,什么?你认为你在做什么可以减少加载时间?
  • @DeepSpace,当然,看下面的例子: from samplecode_server.backendstats.probabilistic_serializers import MultidimensionalSerializer, ProbabilisticSerializer
  • @juanpa.arrivillaga,也许我的知识有差距。将库导入代码库不会增加执行时间吗?而且像 import numpy 这样的东西不是比 from numpy.linalg import norm 更贵吗?
  • @CroissantEngineer 没有。它不是。你永远不能只导入一个模块的一部分,你总是导入整个东西。唯一改变的是当前命名空间中的内容。即,import my_modulefrom my_module import SomeClass * 都执行整个 my_module.py。唯一的区别是模块对象my_module 被添加到命名空间中,另一方面,它实际上等效于import my_module; MyClass = my_module.MyClass; del my_module。你没有保存任何东西

标签: python import pep8


【解决方案1】:

您通常可以通过在表达式周围加上括号来避免超出限制。如果有括号,您可以将其中的表达式拆分为任意多行。另一种不太理想的方法是用反斜杠字符结束一行,这会导致后面的换行符被忽略。

这在 PEP 8 的 Maximum Line Length 部分进行了解释。

【讨论】:

  • 我猜 Pep 328 支持你的提议。我从未见过多行 import 语句,但我猜想的一切都是第一次......
  • PEP 8 没有特别提到imports,可能是因为括号也适用于它们——并且从 Python 2.4 开始就有。您看不到太多,因为大多数代码只是导入模块,然后将其名称作为对其中内容的所有引用的前缀,例如 tkinter.Frame — 这应该是最佳实践,即 PEP 20 中的“显式优于隐式”。为了减少输入量,您经常会看到模块名称绑定到一个短前缀,例如 import tkinter as tk 。另一种流行的方案是在同一个模块中只包含多个 import 语句。
  • P.S.顺便说一句,我个人使用的代码限制为 90 个字符,cmets 限制为 80 个。
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多