您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭]

2024-05-05

多年来,我编写的 Python 越多,我就越发现自己同意大多数准则,尽管我出于自己的原因始终有意地违反了一些准则。

我很想知道 PEP 8(也可能是其他 PEP)中人们虔诚地坚持什么以及为什么,以及人们认为哪些不方便或不充分。

就我而言(以及一般工作中),我们只偏离了少数几件事:

  • 用下划线分隔小写名称,我可以看到它的意义,因为它永远是一致的,但我们倾向于使用小驼峰命名法,即使它偶尔会引入一些不一致的情况(例如部分或错误大写的首字母缩略词和以下单词,这些是通常是临时起意的电话)。主要是因为我们日常使用的 API 几乎全部都使用驼峰命名法(有些大写,有些小写),而且由于某种原因,我发现它更容易阅读,并且倾向于保留下划线作为分隔标记或规定的修饰/模糊。

  • 我仍然无法让自己按照 PEP 在对象内部规定的方式将事物分开。 new 和 init 我倾向于在类下面留下没有空行的内容,因为我总是想在类名和参数中读取它们,这些方法有助于类中相同的功能范围(例如 init、get 和 set相同的属性或一组属性)我只分开一个空格,并且我喜欢类之间的三个空格,以及我不会在该对象的映射中聚集的方法之间的两个空格。 这再次纯粹是为了代码的视觉冲击力和可读性。我发现流程控制中非常紧凑的内容以及方法和对象之间的这种间距始终引导我的眼睛准确地到达我希望它在代码停放几个月后重新阅读的地方。它也对折叠我选择的编辑器反应良好。

  • 相反,我坚持的一些事情,当我读到其他写法时,让我发疯的是制表符而不是空格(特别是当我们使用的一些应用内编辑器实际上没有制表符替换功能时,这在很大程度上导致了代码库的污染)原型设计阶段)。

  • 诸如导入、导入内容、全局变量等事物的顺序。当这些文件混合或无序时,这确实让我对具有大量导入的文件感到厌烦。

  • 语句中的空格,尤其是当人们使用制表符并尝试在 var 名称中跨不同长度的行对齐赋值操作时(并且似乎没有办法说服那些这样做的人,看起来 excel 的代码并不整洁;)) 。

  • 控制块内的间距,特别是当我看到同一流控制块内明显随机的间距,以及方法对象内使用的相似间距时。在我开始阅读这该死的东西之前,我不得不编辑这些内容。

所以,这些是我的,以及我“违反”PEP 背后的原因(有些是共享的,有些是同事们不赞成的)。我非常想了解其他 Pythonista 在这些方面做了什么和没有做什么。


PEP8 表示要避免“在赋值(或其他)运算符周围使用多个空格以将其与另一个运算符对齐”,并且在数学运算符周围“永远不要使用多个空格”,但我不遵循这一点。

当相邻行相关或非常相似但不完全相同时,我经常添加“无关的空白”:

search_start = (f - f_1/3) * n/fs
search_stop  = (f + f_1/3) * n/fs

 

b_lpf, a_lpf = filter(N, 2*pi*fc, 'low',  analog=True)
b_hpf, a_hpf = filter(N, 2*pi*fc, 'high', analog=True)

 

p[x >  1] =                         np.cosh(order * np.arccosh( x[x >  1]))
p[x < -1] = (1 - 2 * (order % 2)) * np.cosh(order * np.arccosh(-x[x < -1]))

 

b0 =  (1 + cos(w0))/2
b1 = -(1 + cos(w0))

同样,这很烦人,我得到数字数组的代码风格警告 https://github.com/PyCQA/pycodestyle/issues/289以可读的方式格式化通常由库本身格式化:

a = array([[-0.198,  0.248, -1.17 , -0.629,  1.378],
           [-1.315,  0.947, -0.736, -1.388,  0.389],
           [ 0.241, -0.98 ,  0.535,  0.951,  1.143],
           [-0.601,  1.286, -0.947,  0.037, -0.864],
           [ 0.178, -0.289, -1.037, -1.453, -0.369]])

这会产生一堆 E201 E202 E222 违规。

显然,PEP8 宁愿将其格式化为这样,因为我们不能ever在逗号之前或括号之后有额外的空格,即使它提高了可读性:

a = array([[-0.198, 0.248, -1.17, -0.629, 1.378],
           [-1.315, 0.947, -0.736, -1.388, 0.389],
           [0.241, -0.98, 0.535, 0.951, 1.143],
           [-0.601, 1.286, -0.947, 0.037, -0.864],
           [0.178, -0.289, -1.037, -1.453, -0.369]])

(And Black https://black.readthedocs.io/en/latest/更糟糕的是:)

a = array(
    [
        [-0.198, 0.248, -1.17, -0.629, 1.378],
        [-1.315, 0.947, -0.736, -1.388, 0.389],
        [0.241, -0.98, 0.535, 0.951, 1.143],
        [-0.601, 1.286, -0.947, 0.037, -0.864],
        [0.178, -0.289, -1.037, -1.453, -0.369],
    ]
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭] 的相关文章

随机推荐

  • JavaScript:字符串连接性能低下? Array.join('')?

    我读过如果我有一个for循环 我不应该使用字符串连接 因为它很慢 例如 for i 0 i lt 10000000 i str a 相反 我应该使用Array join 因为它更快 var tmp for i 0 i lt 10000000
  • 在 Visual Studio 2010 DBML 设计器 (MS SQL/ASP.NET MVC) 中默认设置 UpdateCheck.Never 模式

    在我的网络应用程序中 我做了很多更新 因此 除主键之外的所有列唯一可接受的 UpdateCheck 模式是 NEVER 但不幸的是 DBML 设计器自动设置 ALWAYS 模式 因此 我必须手动更改数十列 并且当我必须更新 DBML 文件时
  • GIT Rebase 对多个 0.5GB 二进制文件致命

    这个问题本质上是重新开rebase 期间 git 崩溃 https stackoverflow com q 7692944 1286639从来没有答案 我正在尝试从我的 secc 分支进行变基 git rebase main First r
  • int 到 long 赋值

    我一直在尝试这个 int 和 long 转换 我尝试分配一个int变量为along多变的 代码如下 public static void main String args int i 1024 long j i long k i i i i
  • 如何使用 cURL(或任何命令行工具)通过 OAuth 身份验证将 HTTP Post 发送到 Twitter?

    我希望使用命令行应用程序 例如cURL http en wikipedia org wiki CURL cURL 在我的测试 Twitter 帐户上发布一些测试帖子 我也希望通过 OAuth 身份验证来做到这一点 我怎样才能做到这一点 假设
  • Azure 存储上的连接池

    我开始使用 Azure 存储将文件保存到应用程序上的 blob 由于我的应用程序可能访问不同存储上的不同容器 我想知道如何实现一个可以优化资源的连接池 我想保持对不同容器的连接打开 而不是每次尝试下载 blob 时都打开连接 谁能为我提供实
  • R:函数中使用的 ggplot2 未反映字体大小变量的变化

    我经常需要将多个不同大小的相同 ggplot2 图表输出到 png 文件 通过使用输出高度和宽度 以像素为单位 的变量 可以轻松生成每个 png 文件的大小 对于 ggplot2 部分 我使用字体大小和某些其他元素的变量 并设置一个简单的循
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • CDI/Weld - 结束对话后如何处理浏览器页面刷新?

    在使用 CDI 的早期 我导航到一个长时间运行的页面 使用 faces redirect true 进行对话 因此我有一个类似 myPage xhtml cid 1 的 URL 在某个时刻我结束了谈话 我的意思是这必须是合理的事情 或者你也
  • 通过 IoC 容器实例化 WCF 服务

    是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的进程来实例化服务 此外 考虑到容器的类型生活方式配置与服务的 InstanceContextBehavior 之间存在潜在冲突 这种方法会是一个糟糕的主意吗 我知道我可能完全问错
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 如何在 Xcode 7 beta 4 中调用 SecItemCopyMatching?

    在使用 Swift 的 Xcode 6 和 7 的早期版本中 以下语法可以使用 var secureItemValue Unmanaged
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 从列表中的每个项目的支持 bean 方法中设置 itemDisabled

    我有一个单选按钮列表 并且想根据支持 bean 方法的结果禁用某些项目
  • 如何检查 firebase 中是否存在孩子? [复制]

    这个问题在这里已经有答案了 我有一个 firebase 它有一个名为 users 的节点 用户给出一个用户名 我想检查该用户名是否已作为用户节点的子节点存在 这是我目前正在尝试的代码 平台是安卓 String myUsername user
  • 如何更改 Kotlin 上生成的 TODO() 函数体?

    我需要在我的代码上留下一些稍后要做的事情TODO 自动生成的会产生一个很长的评论 如下所示 TODO not implemented To change body of created functions use File Settings
  • Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

    我正在使用 requests html 并尝试渲染功能 但收效甚微 当我使用 python3 8 运行这个脚本时 usr bin python3 from requests html import HTML file scrape temp
  • 您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 多年来 我编写的 Python 越多 我就越发现自己同意大多数准则 尽管我出于自己的原因始终有意地违反了一些准则 我很想知道 PEP 8 也可能